根据相同的公司名称标准化客户ID

时间:2018-10-23 03:11:10

标签: r

我需要使用许多客户ID之一,并将其​​标识为所有完全相同的公司名称。

之前

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

之后

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

两家公司的客户ID现在相同。哪种代码最适合呢?

2 个答案:

答案 0 :(得分:1)

我们可以在此处使用match,因为它返回第一个匹配位置。我们可以将match CompanyCompany一起使用。根据{{​​1}}

  

match返回其第一个参数在其第二个参数中(第一个)匹配项的位置的向量。

?match

其中

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

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

的其他一些选项
sapply

在这里,我们遍历每个df$Customer.Ids <- df$Customer.Ids[sapply(df$Company, function(x) which.max(x == df$Company))] 并获取它的第一个实例。


或者使用Company的另一个选项(其遵循与@Shree相同的逻辑)来按组进行首次出现。

ave

答案 1 :(得分:0)

这是使用dplyr软件包的一种方法。它将取代所有公司的第一个实例的所有ID-

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