【发布时间】:2014-06-11 08:39:43
【问题描述】:
我想合并两个没有共同变量的大数据框。我已经尝试过“合并”,但我没有得到我想要的。
一个例子:
# Data frame to merge 1
ID <- c("1", "2", "3", "4", "5")
Colour <- c("Red", "Red", "Red", NA, NA)
Flavour <- c("Sweet", "Sweet", "Sweet", NA, NA)
Price <- c(5, 10, 15, 20, 25)
df1 <- data.frame(ID, Colour, Flavour, Price)
rm(ID, Colour, Flavour, Price)
# Data frame to merge 2
ID <- c("4", "5")
Colour <- c("Green", "Green")
Flavour <- c("Bitter", "Bitter")
df2 <- data.frame(ID, Colour, Flavour)
rm(ID, Colour, Flavour)
# What I'd like to get
ID <- c("1", "2", "3", "4", "5")
Colour <- c("Red", "Red", "Red", "Green", "Green")
Flavour <- c("Sweet", "Sweet", "Sweet", "Bitter", "Bitter")
Price <- c(5, 10, 15, 20, 25)
RESULT <- data.frame(ID, Colour, Flavour, Price)
rm(ID, Colour, Flavour, Price)
非常感谢任何帮助!
【问题讨论】:
-
df1和df2有 no 个公共列。在这种情况下,您需要使用merge的by.x和by.x参数明确告诉mergedf1中的哪些列与df2中的哪些列相关。好好阅读?merge。 -
您好 jbaums,感谢您的评论!对不起,是的,有共同的变量。刚刚编辑。
-
merge不能很好地使用该结构(它会为 NA 添加行)。这是plyr解决方案:library(plyr); ab <- rbind.fill(df1, df2); colFun <- function(x){x[which(!is.na(x))]}; ddply(ab, .(ID), function(x){ colwise(colFun)(x) })。但这是this question 的欺骗。另请参阅@joran 那里给出的data.table方法。 -
感谢您的链接!尝试搜索有关该主题的问题,但找不到任何内容。
-
嗨,在标记之前花点时间阅读标记摘录。 dataframes 用于熊猫,而您需要 data.frame 在这里。下次小心点。请参阅此元帖子。 Warn [r] users from adding [dataframes] tag instead of [data.frame] tag