【问题标题】:Data manipulation - how can I count the number of observations for multiple variables?数据操作 - 我如何计算多个变量的观察次数?
【发布时间】:2020-06-12 12:40:22
【问题描述】:

我有 3 个向量:

pizza=c("satisfied","dissatisfied","neutral","dissatisfied","dissatisfied")
burger=c("dissatisfied","satisfied","dissatisfied","satisfied","neutral")   
drinks=c("neutral","dissatisfied","neutral","dissatisfied","satisfied")

如何使用 dplyr 包过滤它们,以便根据项目对所有反应的总数进行分组?

【问题讨论】:

  • 你能举一个预期输出的例子吗?
  • 比萨汉堡饮品不满意 3 2 2 中性 1 1 2 满意 1 2 1

标签: r dplyr


【解决方案1】:

这是pivot_wider 来自tidyr 的一种方法:

library(tidyr)
library(dplyr)
tibble(pizza,burger,drinks) %>%
  pivot_longer(everything(), names_to = "food") %>%
  group_by(food) %>%
  count(value)

# A tibble: 9 x 3
# Groups:   food [3]
  food   value            n
  <chr>  <chr>        <int>
1 burger dissatisfied     2
2 burger neutral          1
3 burger satisfied        2
4 drinks dissatisfied     2
5 drinks neutral          2
6 drinks satisfied        1
7 pizza  dissatisfied     3
8 pizza  neutral          1
9 pizza  satisfied        1

【讨论】:

  • count() 是一个分组函数,所以你可以只做count(food, value)。
  • 好的,谢谢您的建议。我保留它是为了对 OP 进行教育。
  • 可以通过组函数而不是枢轴来完成相同的事情吗?
  • 我不确定我是否理解这个问题,但 hello_friend 的回答略有不同可能会有所帮助:t(sapply(data.frame(pizza, burger, drinks), table))
【解决方案2】:

我知道您要求使用 dplyr,但这里是 Base R 单线:

sapply(data.frame(pizza, burger, drinks), table)

数据:

pizza=c("satisfied","dissatisfied","neutral","dissatisfied","dissatisfied")
burger=c("dissatisfied","satisfied","dissatisfied","satisfied","neutral")   
drinks=c("neutral","dissatisfied","neutral","dissatisfied","satisfied")

【讨论】:

    【解决方案3】:

    base R 中的一个选项

    table(stack(list(pizza = pizza, burger = burger, drinks = drinks)))
    

    或者如果我们需要长格式

    as.data.frame(table(stack(list(pizza = pizza, burger = burger, drinks = drinks))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 2023-03-05
      • 2021-11-22
      • 2021-04-26
      相关资源
      最近更新 更多