首页 > 解决方案 > 两个数据框列之间的百分比差异(仅数字)

问题描述

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

df1并且df2具有相同的结构和相同的列名。

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]

有人可以帮忙吗?

标签: rdplyrplyr

解决方案


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

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

推荐阅读