【问题标题】:Find frequency table without using dcast不使用 dcast 查找频率表
【发布时间】:2019-06-07 21:03:14
【问题描述】:

给定数据

> data
  Month Alpha
1   Jan     A
2   Jan     B
3   Jan     A
4   Feb     B
5 March     A
6 March     A
7 April     A

需要的输出

请通过 group_by() 或 spread() 函数提供不使用 dcast 函数的解决方案。无法正常使用功能。

【问题讨论】:

  • 考虑告诉我们您为什么不使用t want to use dcast`。
  • 你能展示一下你的尝试吗?
  • 使用dplyr,您可以执行df %>% group_by(Month, Alpha) %>% mutate(count = n()) %>% ungroup() %>% gather(var, val, -Month, -Alpha) %>% distinct() %>% spread(Alpha, val, fill = 0) %>% select(-var) 之类的操作。
  • @tmfmnk 好像有点简单group_by(dat, Month, Alpha) %>% summarise(n = n()) %>% spread(Alpha, n, fill = 0)
  • data %>% count(Month, Alpha) %>% spread(Alpha, n, fill = 0L)

标签: r dplyr frequency tidyverse


【解决方案1】:

这是一个基本的 R 解决方案:

with(df,table(Month,Alpha))


     Alpha
Month   A B
  April 1 0
  Feb   0 1
  Jan   2 1
  March 2 0

我正在准备的tidyverse 选项,正如@markus 所建议的那样:

df %>% 
  group_by(Month,Alpha) %>% 
  summarise(N=n()) %>% 
  spread(Month,N,fill=0)#can use Alpha instead of Month
 Alpha April   Feb   Jan March
  <fct> <dbl> <dbl> <dbl> <dbl>
1 A         1     0     2     2
2 B         0     1     1     0

【讨论】:

  • 谢谢。没想到,很优雅。
  • 在上面的基础上你可以使用:freq_table &lt;- as.tibble(table(df)) %&gt;% spread(Alpha, n)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多