对于 Col 2 中的值,将 Col 1 中的所有值替换为 Col 1 中的第一次出现

For value in Col 2, replace all values in Col 1 with first occurrence in Col 1

我正在清理一个大型数据集,第 1 列有几个公司名称的拼写。第 2 列中的公司 ID 在所有公司拼写中都是相同的,因此我想搜索公司 ID 并将所有公司拼写替换为第一个拼写(哪个不重要)。

我是 R 和 data.table 语法的新手,但曾尝试遍历公司 ID 并使用 setDT 替换公司名称值。但是,我无法弄清楚如何仅将那些共享相同公司 ID 的公司替换为公司名称拼写的第一个实例。

这是我目前所在的位置:


library(data.table)

#Sample Datatable

CompanyDT <- data.table(Company_Name=c("Froklo","Forklo","Forlko","Corp3","Grap","Garp"), Company_ID=c(1,1,1,2,3,3))

#   Company_Name Company_ID
#1:       Froklo          1
#2:       Forklo          1
#3:       Forlko          1
#4:        Corp3          2
#5:         Grap          3
#6:         Garp          3

我正在处理的循环

for(j in CompanyDT[,.(Company_ID)])
  FirstFacName <- CompanyDT[Company_ID[j], Company_Name]
  setDT(CompanyDT)[, Company_Name:=FirstFacName]

我想要这个结果,第一个拼写实例替换所有具有相同公司 ID 的公司名称:

#   Company_Name Company_ID
#1:       Froklo          1
#2:       Froklo          1
#3:       Froklo          1
#4:        Corp3          2
#5:         Grap          3
#6:         Grap          3

但我得到了这个结果,table 中的第一个公司名称替换​​了所有公司名称,而不管公司 ID:

#  Company_Name Company_ID
#1:       Froklo          1
#2:       Froklo          1
#3:       Froklo          1
#4:       Froklo          2
#5:       Froklo          3
#6:       Froklo          3

dplyr 方法是:

library(dplyr)
CompanyDT %>% 
  group_by(Company_ID) %>%
  mutate(Company_Name_new = first(Company_Name))

# A tibble: 6 x 3
# Groups:   Company_ID [3]
  Company_Name Company_ID Company_Name_new
  <chr>             <dbl> <chr>           
1 Froklo                1 Froklo          
2 Forkslo               1 Froklo          
3 Forlko                1 Froklo          
4 Corp3                 2 Corp3           
5 Grap                  3 Grap            
6 Garp                  3 Grap