【发布时间】:2018-06-26 05:37:05
【问题描述】:
目标数据表如下:
#DT
NO GROUP KEY TYPE <--- Create this column
12-19 N 1701 INN
10-20 N 1602 INN
13 P 1501John BANK
14 R 1408Mary POOL
15 G 1408Peter PARK
19 K 1408Paul BANK
25 P 1708 OTHER
36 R 1503 OTHER
第 1 步:使用 col : KEY 从另一个表中查找 TYPE 信息
DT[,"TYPE":= RefDT[match(DT$KEY,Ref$KEY),2]]
# RefDT like below :
KEY TYPE
1609TOM PARK
1501John BANK
1408Mary POOL
1408Peter PARK
1408Paul BANK
1309Sue POOL
- 与 KEY 不匹配的行变为 NA #
第 2 步:创建下一个组信息而不覆盖第 1 步结果
*如果 Col : 不包含“-”,则 TYPE 为“INN”。
DT[,TYPE:= ifelse(grepl("-",DT$No),"INN",TYPE)]
第 3 步:改变其余 NA 行而不覆盖第 1 步和第 2 步结果
*如果 Col : GROUP 是 "P" 或 "R" , TYPE 是 "Other" ,第 1 步规则覆盖此规则。这就是为什么即使某些行在 Col : GROUP 中包含“P”或“R”,如果它们具有有效的 KEY,它们的 TYPE 也不会改变。
DT <- DT[is.na(TYPE),] %>% mutate(TYPE = ifelse(grepl("P|R",GROUP),"OTHER",TYPE)) %>%
rbind(DT[!is.na(TYPE),])
data.table中步骤3的等效方法是什么?
由于实际数据集包含 2 百万行,我需要一个更快的 实现这一点的方法。欢迎任何有效的脚本 总结三个只创建一列的笨拙脚本。
【问题讨论】:
标签: r data.table dplyr