我会通过准备清单解决这个问题包括最终数据框的行,然后将它们“绑定”在一起。唯一的技巧是计算行的最大长度并相应地添加NAs。这应该工作。
ID <- data.frame(Alphabet = c("A", "A","A","B", "B", "C"),
Value = c(101,102, 103,201,202,301))
df <- data.frame(Name = c("A", "A","B", "C"))
tmp <- lapply(df$Name, (function(id){
ID[ID$Alphabet == id, ]$Value
}))
max.el <- max(sapply(tmp, length))
out.df <- do.call(rbind, lapply(tmp, (function(el){
len.na <- max.el - length(el)
c(el, rep(NA, len.na))
})))
print(out.df, na.print = "")
这是结果
[,1] [,2] [,3]
[1,] 101 102 103
[2,] 101 102 103
[3,] 201 202
[4,] 301
如果显示设备上没有问题,那么
colnames(out.df) <- paste("ID", c(1:max.el), sep = "")
out.df <- cbind(df, out.df)
out.df
Name ID1 ID2 ID3
1 A 101 102 103
2 A 101 102 103
3 B 201 202 NA
4 C 301 NA NA