首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用tidyeval方式移除列

用tidyeval方式移除列
EN

Stack Overflow用户
提问于 2017-07-14 10:18:11
回答 4查看 1.8K关注 0票数 6

我想使用dplyr >= 0.7移除列向量。

代码语言:javascript
复制
library(dplyr)
data(mtcars)

rem_cols <- c("wt", "qsec", "vs", "am", "gear", "carb")
head(select(mtcars, !!paste0("-", rem_cols)))

错误:字符串必须与列名匹配。未知列:-wt、-qsec、-vs、-am、-gear、-carb

dplyr < 0.7工作如下:

代码语言:javascript
复制
head(select_(mtcars, .dots = paste0("-", rem_cols)))
#                    mpg cyl disp  hp drat
# Mazda RX4         21.0   6  160 110 3.90
# Mazda RX4 Wag     21.0   6  160 110 3.90
# Datsun 710        22.8   4  108  93 3.85
# Hornet 4 Drive    21.4   6  258 110 3.08
# Hornet Sportabout 18.7   8  360 175 3.15
# Valiant           18.1   6  225 105 2.76

我试过所有的组合:syms(),!,!,我能想到的现状和现状……救命!?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-14 10:28:22

我们可以使用one_of

代码语言:javascript
复制
 mtcars %>%
        select(-one_of(rem_cols))
票数 9
EN

Stack Overflow用户

发布于 2017-07-17 13:37:42

在这种情况下,我也会使用one_of(),但更一般的情况下,您必须创建以符号作为参数的对-的调用。

代码语言:javascript
复制
# This creates a single call:
call("-", quote(a))

# This creates a list of calls:
syms(letters) %>% map(function(sym) call("-", sym))

然后,可以将调用列表与!!!连接起来。

票数 6
EN

Stack Overflow用户

发布于 2018-06-24 00:25:51

我很难精确地完成这个任务,这导致我编写了一个包,friendlyeval,以简化整洁的package。这里有一个关于如何使用这个方法的想法:

代码语言:javascript
复制
library(friendlyeval)
library(dplyr)
data(mtcars)

rem_cols <- c("wt", "qsec", "vs", "am", "gear", "carb")
minus_cols <- paste0("-",rem_cols)
# [1] "-wt"   "-qsec" "-vs"   "-am"   "-gear" "-carb"

head(select(mtcars, !!!friendlyeval::treat_strings_as_exprs(minus_cols)))

#                    mpg cyl disp  hp drat
# Mazda RX4         21.0   6  160 110 3.90
# Mazda RX4 Wag     21.0   6  160 110 3.90
# Datsun 710        22.8   4  108  93 3.85
# Hornet 4 Drive    21.4   6  258 110 3.08
# Hornet Sportabout 18.7   8  360 175 3.15
# Valiant           18.1   6  225 105 2.76

这里的一个陷阱是您必须使用treat_strings_as_exprs()而不是treat_strings_as_cols(),因为"-wt“是一个包含列名的表达式,而不是实际的列名。

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

https://stackoverflow.com/questions/45100518

复制
相关文章

相似问题

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