blueshift123
blueshift123

Reputation: 23

standardizing customer ids based on the same company name

I need to use one of the many customers ids and standarize it upon all companies names that are extact same.

Before

    Customer.Ids       Company        Location
    1211            Lightz           New York
    1325            Comput.Inc       Seattle 
    1756            Lightz          California 

After

    Customer.Ids     Company        Location
    1211             Lightz            New York
    1325             Comput.Inc        Seattle 
    1211             Lightz           California

The customer ids for the two companies are now the same. Which code would be the best for this?

Upvotes: 1

Views: 28

Answers (2)

Ronak Shah
Ronak Shah

Reputation: 388982

We can use match here as it returns the first matching position. We can match Company with Company. According to ?match

match returns a vector of the positions of (first) matches of its first argument in its second.

df$Customer.Ids <- df$Customer.Ids[match(df$Company, df$Company)]
df

#  Customer.Ids    Company   Location
#1         1211     Lightz    NewYork
#2         1325 Comput.Inc    Seattle
#3         1211     Lightz California

where

match(df$Company, df$Company) #returns
#[1] 1 2 1

Some other options, using sapply

df$Customer.Ids <- df$Customer.Ids[sapply(df$Company, function(x)
                               which.max(x == df$Company))]

Here we loop over each Company and get the first instance of it's occurrence.


Or another option using ave which follows same logic as that of @Shree, to get first occurrence by group.

with(df, ave(Customer.Ids, Company, FUN = function(x) head(x, 1)))
#[1] 1211 1325 1211

Upvotes: 1

Shree
Shree

Reputation: 11140

Here's a way using dplyrpackage. It'll replace all Ids as per the first instance for any company -

df %>%
  group_by(Company) %>%
  mutate(
    Customer.Ids = Customer.Ids[1]
  ) %>%
  ungroup()

# A tibble: 3 x 3
  Customer.Ids Company    Location  
         <int> <fct>      <fct>     
1         1211 Lightz     New York  
2         1325 Comput.Inc Seattle
3         1211 Lightz     California

Upvotes: 0

Related Questions