两个数据框列之间的百分比差异(仅数字)

时间:2018-08-25 03:35:47

标签: r dplyr plyr

我有两个数据框(df1df2),想只减去两个数据框[(df2-df1)/df2]之间的数值列,并确定百分比差异,并使用创建一个输出数据框= df3 R.非数字列将保留原样。

df1df2具有相同的结构和相同的列名。

df1:

colA colB colC   ...   colZ
mean   10   20      stringA
count  30   50      stringB

df2:

colA colB colC   ...  colZ
mean    5   25     stringA
count  60   50     stringB

df3:

colA  colB colC   ...   colZ
mean  -100   20      stringA
count   50    0      stringB

我尝试了一下,但是没用:

 df2[,2:3] = (df2[,2:3] - df1[,2:3])/df2[,2:3]

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

我们可以对数字列进行子集化,然后执行操作

num_cols <- c("colB", "colC")
df3 <- (df2[num_cols] - df1[num_cols])/df2[num_cols] * 100
df3

#  colB colC
#1 -100   20
#2   50    0

要获取其他非数字列,我们可以使用setdiff然后使用cbind

cbind(df1[setdiff(names(df1), num_cols)], df3)

#   colA    colZ colB colC
#1  mean stringA -100   20
#2 count stringB   50    0