合并行数不相等且列名称不匹配的数据框R

时间:2019-11-08 15:55:47

标签: r dataframe merge

我正在尝试使用df1(摘要表),并将其合并到df2(主摘要表)中。 这是df2的快照,忽略随机数42,仅是最终问题的答案。 df2 这是df1的示例。

df1

最后,我有一个称为日期的向量。这与作为df2列名称的日期匹配。 我试图循环浏览20个文件,并收集该文件的摘要统计信息。然后,我想将该数据输入df2进行永久存储。我只需要输入收入列。 我尝试使用合并,但是由于它们没有共享的列名,因此无法使用。 我的下一个尝试是尝试这个。但由于行号不相等,因此产生了错误。

/list

然后我想,如果我指定了确切的位置,它可能会起作用。

df2[,paste(Dates[i])] <- cbind(df2,df1)

但这给了错误,“新列将在现有列之后留下漏洞” 因此,我想到了再尝试一次,但是要使用cbind。

df2[1:length(df1$Earned),Dates[i]] <- df1$Earned

任何想法都将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

类似的事情可能会起作用:

df1[df1$TreatyYear %in% df2$TreatyYear, Dates] <- df2$Earned

示例

df <- data.frame(matrix(NA,4,4))
df$X1 <- 1:4

df[df$X1 %in% c(1,2),c("X3","X4")] <- c(1,2)

答案 1 :(得分:0)

到目前为止,我发现的唯一解决方案是将df1 $ Earned强制为向量。然后将向量附加为df2的确切长度。然后,我可以通过特定列将值插入df2中。

temp_values <- append(df1$Earned,rep(0,(length(df2$TreatyYear)-length(df1$TreatyYear))),after=length(df1$Earned))
df2[,paste(Dates[i])] <- temp_values

这是一种修复的round回方式,但不是一种非常舒适的方式。任何更好的想法将不胜感激。