将匹配的列从长列转换为宽列

Convert matched column from long to wide

我有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 和 return C 到 df。 1,但如果 df.2$ID 中存在重复,则为每个可能的答案创建一个单独的列(即将 C 从长转换为宽) .所以我最终会得到:

ID     B C1 C2 C3
006007 M N   S NA
123456 F NA  S NA
987654 F NA  NA W

只是为了重复,每个 ID 需要一行,每个 ID 的每个结果都在单独的列中。

如果您需要更多说明,请告诉我,非常感谢您的帮助,伙计们。

# 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)