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

percentage difference between two dataframe columns (only numeric)

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

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]

有人可以帮忙吗?

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

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