首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列除以另一列dplyr R

将列除以另一列dplyr R
EN

Stack Overflow用户
提问于 2019-12-14 19:19:38
回答 1查看 641关注 0票数 0

我在桌子上这样做:

代码语言:javascript
复制
tmp %>%
mutate(sum_onCPA = rowSums(select(., setdiff(colnames(.),NON_CPA_VARIABLES)))) %>%
mutate_at(vars(CPA_A01: CPA_U), (./ sum_onCPA))

因此,我想用列的和(sum_onCPA)除以每列的和CPA_A01到CPA_U (65列),但是我得到了错误

代码语言:javascript
复制
Error in is_fun_list(.funs) : object 'sum_onCPA' not found

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-12-14 19:39:12

您可以调用.$sum_onCPA:

代码语言:javascript
复制
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)))) 

你可以做到

代码语言:javascript
复制
tmp %>% mutate_at(vars(X2:X4),function(i)i/.$sum_onCPA)

感谢@ronakshah,他指出了一个更简洁的版本:

代码语言:javascript
复制
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

我们可以使用base R扫描检查上面的内容是否正确:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59334627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档