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

时间:2019-05-24 23:52:30

标签: r

我正在清理一个大数据集,第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))

我正在处理的循环

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

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

data.table(Company_Name=c("Froklo","Froklo","Froklo","Corp3","Grap","Grap"), Company_ID=c(1,1,1,2,3,3))

但是我得到了这个结果,表中的第一个公司名称替换​​了所有公司名称,而与公司ID无关:

data.table(Company_Name=c("Froklo","Froklo","Froklo","Froklo","Froklo","Froklo"), Company_ID=c(1,1,1,2,3,3))
dt3

1 个答案:

答案 0 :(得分:0)

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