r - 两个数据框列之间的百分比差异(仅数字)
问题描述
我有两个数据框(df1
和df2
),并且想仅减去两个数据框之间的数字列[(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]
有人可以帮忙吗?
解决方案
我们可以对数字列进行子集化,然后执行操作
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
推荐阅读
- json - 将复杂的嵌套 JSON 反序列化为 Scala 对象
- javascript - 当我从另一个页面加载时,JavaScript 无法正常工作
- ios - 为什么iphone和ipad上不显示背景图片?
- r - 2 个因素的初学者 R 预测模型
- php - 使用 UMI CMS 在 php 模板中输出自定义函数结果
- docker - Docker 部署选项,但保持相同的容器
- jquery - 通过单击外部关闭移动菜单 - 正文
- python - 我如何将所有偶数加在一起?
- actions-on-google - 如何从我的 webhook 触发 `action.intent.INTENT_NAME` 意图?
- bootstrap-4 - 无法在引导程序 4 中居中列