【问题标题】:How to use base R function using data subsetted with tidyverse如何使用 tidyverse 子集化的数据使用基本 R 函数
【发布时间】:2021-10-14 10:17:15
【问题描述】:

假设我有这些数据:

testdata <- data.frame(a=c(1,2,3), b=c("a", "b", "b"))

我想使用基本 R table 命令来获取变量 b 的计数,但在基于 a 的值进行子集之后。重要的是,我想在一行中使用 tidyverse 进行子集化。这是一个行不通的尝试;我不知道如何让它正确引用列b

table(testdata %>% filter(a<3) $ b)

请注意,这是我分两步完成的:

testdata2 <- testdata %>% filter(a<3)
table(testdata2$b)

【问题讨论】:

  • 这很丑,但你可以使用同样的旧$ 语法,比如table((testdata %&gt;% filter(a &lt; 3))$b) 问题是你试图子集filter(a&lt;3) 而不是(...)包围的整个表达式

标签: r tidyverse subset


【解决方案1】:

使用pull 提取列,然后应用table

library(dplyr)
testdata %>% 
     filter(a<3) %>%
     pull(b) %>% 
     table

-输出

a b 
1 1 

或将base R|&gt; 运算符一起使用(从R 4.1.0 开始)

subset(testdata, a < 3, select = b) |> 
      table()

a b 
1 1 

既然我们已经在使用dplyr,为什么不使用count

testdata %>%
    filter(a < 3) %>%
    count(b)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-07
    • 2021-11-12
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多