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