关于dplyr here的文章说" []" (方括号)可用于对过滤后的Tibbles进行子集化,如下所示:
filter(mammals, adult_body_mass_g > 1e7)[ , 3]
但是我找到了一个未找到的对象"错误。 以下是在更知名的数据集" iris"
上复制错误library(dplyr)
iris %>% filter(Sepal.Length>6) [,c(1:3)]
filter _(。data,.dots = lazyeval :: lazy_dots(...))出错: 对象' Sepal.Length'找不到
我还想提一下,我故意不想使用select()
在dplyr中使用本机子集,因为我需要一个向量输出而不是单个列上的数据帧。不幸的是,dplyr总是强制数据帧输出(出于好的理由)。
答案 0 :(得分:2)
你需要一个额外的管道:
iris %>% filter(Sepal.Length>6) %>% .[,1:3]
抱歉,忘了括号前的.
。
注意:如果你坚持使用tidyverse语法并使用select作为最后一个操作,你的代码可能会更具可读性。
iris %>%
filter(Sepal.Length > 6) %>%
select(1:3)
答案 1 :(得分:2)
dplyr
- 本地执行此操作的方法是使用select
:
iris %>% filter(Sepal.Length > 6) %>% select(1:3)
您还可以使用{}
,以便在应用[
之前完成过滤:
{iris %>% filter(Sepal.Length>6)}[,c(1:3)]
或者,正如另一个答案中所建议的那样,使用.
符号表示数据应该与[
相关的位置:
iris %>% filter(Sepal.Length>6) %>% .[,1:3]
您还可以明确加载magrittr
并使用extract
,这是[
的“可管道”版本:
library(magrittr)
iris %>% filter(Sepal.Length>6) %>% extract( ,1:3)
您引用的博客条目在dplyr
时间过去了 - 大约3岁。 dplyr
已发生很大变化。我不知道博客的建议是否在编写时起作用,但我建议您找一些更新的资料来了解这个经常变化的软件包。