r - 将列除以另一列 dplyr R
问题描述
我在桌子上这样做:
tmp %>%
mutate(sum_onCPA = rowSums(select(., setdiff(colnames(.),NON_CPA_VARIABLES)))) %>%
mutate_at(vars(CPA_A01: CPA_U), (./ sum_onCPA))
所以我想将每列 CPA_A01 到 CPA_U(65 列)除以列上的总和(sum_onCPA),但我得到了错误
Error in is_fun_list(.funs) : object 'sum_onCPA' not found
任何想法?
解决方案
您可以调用 .$sum_onCPA:
set.seed(100)
tmp = data.frame(matrix(runif(25),ncol=5))
NON_CPA_VARIABLES = c("X1","X5")
tmp = tmp %>%
mutate(sum_onCPA = rowSums(select(., setdiff(colnames(.),NON_CPA_VARIABLES))))
你可以做
tmp %>% mutate_at(vars(X2:X4),function(i)i/.$sum_onCPA)
感谢@ronakshah,他指出了一个更简洁的版本:
tmp %>% mutate_at(vars(X2:X4),~.x/sum_onCPA)
X1 X2 X3 X4 X5 sum_onCPA
1 0.30776611 0.2721193 0.3515583 0.3763224 0.5358112 1.777789
2 0.25767250 0.4277649 0.4644980 0.1077371 0.7108038 1.899180
3 0.55232243 0.3673089 0.2780738 0.3546173 0.5383487 1.008199
4 0.05638315 0.4189724 0.3054667 0.2755609 0.7489722 1.304522
5 0.46854928 0.1048991 0.4698105 0.4252905 0.4201015 1.623104
我们可以使用基本 R 扫描检查上述是否正确:
tmp[,c("X2","X3","X4")] = sweep(tmp[,c("X2","X3","X4")],1,tmp$sum_onCPA,"/")
tmp
X1 X2 X3 X4 X5 sum_onCPA
1 0.30776611 0.2721193 0.3515583 0.3763224 0.5358112 1.777789
2 0.25767250 0.4277649 0.4644980 0.1077371 0.7108038 1.899180
3 0.55232243 0.3673089 0.2780738 0.3546173 0.5383487 1.008199
4 0.05638315 0.4189724 0.3054667 0.2755609 0.7489722 1.304522
5 0.46854928 0.1048991 0.4698105 0.4252905 0.4201015 1.623104
推荐阅读
- matplotlib - 每次我更改“figsize”时,大小都不会改变
- c - 如何不为空终止缓冲区?
- mysql - 连接两个表然后计算两列之间的时间差
- r - 将经度/纬度坐标转换为兰伯特等角圆锥投影
- android - 如何验证函数在 Runnable::run() 中被调用
- php - 使用高级自定义字段关系字段帖子类型修复 wordpress/elementor 的自定义查询
- reactjs - 解析错误:“导入”和“导出”可能只出现在顶层(反应)
- php - 如何解码可疑的 PHP 文件
- swift - Firebase - 根据日期获取用户
- r - 我可以以编程方式控制绘图缩放功能而无需在 R 闪亮的应用程序中重新绘图吗?