快速提问,
如果我有两个重叠列的数据帧按顺序不匹配,例如:
df1
Chocolate Strawberry
2 15
3 10
4 5
df2
Strawberry Chocolate Vanilla
14 4 30
9 4 15.2
5 4 10
我想仅为匹配的列减去两个数据帧,并忽略任何不重叠的列。
期望的结果:
Chocolate Strawberry
-2 1
-1 1
0 0
示例代码:
df1 <- data.frame(chocolate = c(2,3,4), strawberry = c(15,10,5))
df2 <- data.frame(strawberry = c(14,9,5), chocolate = c(4,4,4), vanilla = c(30,15.2,10))
答案 0 :(得分:4)
我们可以使用intersect
获取公共列,然后使用sort
这些列,以便列在相同的顺序中减去,无论它们在各自的数据框中的顺序如何(df1
和df2
)。
cols <- sort(intersect(names(df1), names(df2)))
df1[cols] - df2[cols]
# chocolate strawberry
#1 -2 1
#2 -1 1
#3 0 0