我有两个数据框(df1
和df2
),想只减去两个数据框[(df2-df1)/df2]
之间的数值列,并确定百分比差异,并使用创建一个输出数据框= df3 R.非数字列将保留原样。
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]
有人可以帮忙吗?
答案 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