首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在r中的dplyr中使用非标准评估

无法在r中的dplyr中使用非标准评估
EN

Stack Overflow用户
提问于 2020-12-24 22:56:38
回答 1查看 33关注 0票数 0

我想用变量的名称对一些变量进行行加和。

我尝试了一些方法,但都失败了。

如何正确运行sum(ttt)

任何帮助我们都将不胜感激!

代码语言:javascript
运行
复制
library(dplyr) 
data(mtcars)
m2 = mtcars[1:3,10:11]

# Run
m2 %>% 
  rowwise() %>% 
  mutate(cc = sum(carb, gear))
# Not Run
m2 %>% 
  rowwise() %>% 
  mutate(cc = sum('carb', 'gear'))
# Not Run
ttt = c('carb', 'gear')
m2 %>% 
  rowwise() %>% 
  mutate(cc = sum(ttt))
# Run but the result was wrong
m2 %>% 
  rowwise() %>% 
  mutate(cc = sum(get(ttt)))
# Not Run
m2 %>% 
  rowwise() %>% 
  mutate(cc = sum(mget(ttt)))
EN

回答 1

Stack Overflow用户

发布于 2020-12-25 00:14:17

我们可以转换为symbols并求值(!!!)

代码语言:javascript
运行
复制
library(dplyr)
m2 %>% 
    rowwise() %>% 
    mutate(cc = sum(!!! rlang::syms(c('carb', 'gear'))))

-output

代码语言:javascript
运行
复制
# A tibble: 3 x 3
# Rowwise: 
#   gear  carb    cc
#  <dbl> <dbl> <dbl>
#1     4     4     8
#2     4     4     8
#3     4     1     5

或者在子集上使用rowSums,该子集将被矢量化且速度更快

代码语言:javascript
运行
复制
m2 %>%
   mutate(cc = rowSums(select(., 'carb', 'gear')))

select既可以使用带引号的列名,也可以使用不带引号的列名

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65439943

复制
相关文章

相似问题

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