我有df.1
ID B
006007 M
123456 F
987654 F
和df.2
ID B C
006007 M N
006007 M S
123456 F S
987654 F W
我正在尝试查找 ID 以匹配df.2并将 C 返回到df.1,但为每个可能的答案创建一个单独的列,如果 df.2 $ ID 中存在重复(即将 C 从long转换为宽)。所以我最终得到:
ID B C1 C2 C3
006007 M N S NA
123456 F NA S NA
987654 F NA NA W
只是为了重新迭代我需要为每个ID分配一行,每个ID都在单独的列中。
如果您需要更多说明,请告诉我,我非常感谢您的帮助,伙计们。
答案 0 :(得分:1)
# merge the data
m = merge(df.1, df.2)
# convert it to wide
library(data.table)
dcast(m, ID + B ~ C, value.var = "C")
# ID B N S W
# 1 6007 M N S <NA>
# 2 123456 F <NA> S <NA>
# 3 987654 F <NA> <NA> W
我允许你将列重命名为C1,C2,...,如果你真的想要。
使用此数据:
df.1 = read.table(text = "ID B
006007 M
123456 F
987654 F", stringsAsFactors = FALSE, header = T)
df.2 = read.table(text = "ID B C
006007 M N
006007 M S
123456 F S
987654 F W", stringsAsFactors = FALSE, header = T)