仅为匹配列减去两个数据帧

时间:2018-02-26 06:45:23

标签: r

快速提问,

如果我有两个重叠列的数据帧按顺序不匹配,例如:

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))

1 个答案:

答案 0 :(得分:4)

我们可以使用intersect获取公共列,然后使用sort这些列,以便列在相同的顺序中减去,无论它们在各自的数据框中的顺序如何(df1df2)。

cols <- sort(intersect(names(df1), names(df2)))
df1[cols] - df2[cols]

#  chocolate strawberry
#1        -2          1
#2        -1          1
#3         0          0