将匹配列从长到宽

时间:2018-01-03 17:02:49

标签: r lookup

我有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都在单独的列中。

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

1 个答案:

答案 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)