我有两个包含重复列的数据框,data1
和data2
。我现在正在运行for循环,每个循环将data1中的一列与data2中的整列合并。例如
DATA1:
1 1 3 4 4
2 5 2 4 2
2 2 8 8 0
DATA2
1 4 5 4 5
2 9 3 4 5
2 7 4 8 0
columns 1 and 4
在data1
和data2
中重复。对于第一个循环,它合并
1
2
2
data2
1 4 5 4 5
2 9 3 4 5
2 7 4 8 0
所以期望的结果是
1 4 5 4 5
2 9 3 4 5
2 7 4 8 0
然后转到second column
1
5
2
并与data2
1 4 5 4 5
2 9 3 4 5
2 7 4 8 0
期望的结果将是
1 1 4 5 4 5
5 2 9 3 4 5
2 2 7 4 8 0
我的想法是使用combine
或merge
函数,但这两个函数无法实现所需的输出
for(i in 1:dim(data[2])){
datam_merge<- merge(data1[i], data2)
}
任何建议都表示赞赏!
答案 0 :(得分:0)
这应该可以解决问题:
data3 <- dplyr::left_join(data2, data1)
head(data3)
left_join()
函数确定哪些列data2
与data1有共同点,然后只加入data1
到data2
的不相似列。
我注意到您的“预期结果”正在从data1
中删除第5列。这是故意的,还是您想要的输出是一个新的数据框,其中包含data1
和data2
的所有列,没有任何重复项?
这是另一种可能是更通用的解决方案:
data3 <- dplyr::inner_join(data1, data2)
这只会加入两个数据帧之间的唯一列,而不仅仅是data1
。
请告诉我这是否是您要找的!
修改强> 这是我的例子:
data1 <- data.frame(c(1,2,2),c(1,5,2),c(3,2,8),c(4,4,8),c(4,2,0))
names(data1) <- c("A","B","C","D","E")
data2 <- data.frame(c(1,2,2),c(4,9,7),c(5,3,4),c(4,4,8),c(5,5,0))
names(data2) <- c("A","F","G","D","H")
## columns 'A' and 'D' are in common, but we only need one of each letter ('A' through 'E').
data3 <- left_join(data2, data1)
head(data3)
A F G D H B C E
1 1 4 5 4 5 1 3 4
2 2 9 3 4 5 5 2 2
3 2 7 4 8 0 2 8 0