每年每种类型有多少个计数?使用group_by()或Split()

时间:2018-08-15 11:58:59

标签: r dplyr

我有一个数据帧df,如下所示:

df
    Code Time         Country Type
1   n001 2000          France    1
2   n002 2001           Japan    5
3   n003 2003             USA    2
4   n004 2004             USA    2
5   n005 2004          Canada    1
6   n006 2005         Britain    2
7   n007 2005             USA    1
8   n008 2005             USA    2
9   n010 2005             USA    1
10  n011 2005          Canada    1
11  n012 2005             USA    2
12  n013 2005             USA    5
13  n014 2005          Canada    1
14  n015 2006             USA    2
15  n017 2006          Canada    1
16  n018 2006         Britain    1
17  n019 2006          Canada    1
18  n020 2006             USA    1
...

其中Type是新闻的类型,Time是新闻发布的年份。 我的目的是计算每年每种新闻的数量。

我正在考虑这样的结果:

...
$2005
Type: 1   Count: 4
Type: 2   Count: 3
Type: 5   Count: 1

$2006
Type: 1   Count: 4
...

我使用了以下代码:

gp = group_by(df, Time)
summarise(gp, table(Time)
  

summarise_impl(.data,点)中的错误:     评估错误:unique()仅适用于向量。

然后我尝试了split( ),以为它可以按年份分隔数据框,因此我可以按年份计算每种类型的数量

split(df, 'Time')

$Time
    Code Time         Country Type
1   n001 2000          France    1
2   n002 2001           Japan    5
3   n003 2003             USA    2
4   n004 2004             USA    2
...

除“ $ Time”符号外,其他所有内容都几乎相同。

我想知道自己做错了什么以及如何解决。

3 个答案:

答案 0 :(得分:1)

我们可以split Type Time列,table可以计算频率。

lapply(split(df$Type, df$Time), table)


#$`2000`
#1 
#1 

#$`2001`
#5 
#1 

#$`2003`
#2 
#1 

#$`2004`
#1 2 
#1 1 

#$`2005`
#1 2 5 
#4 3 1 

#$`2006`
#1 2 
#4 1 

答案 1 :(得分:1)

怎么样?

df %>%
   group_by(Time, Type) %>%
   count() %>%
   spread(Type, n)

答案 2 :(得分:0)

您可以使用类似这样的东西。按时间分割,然后按类型分组并计算结果

df %>% 
  split(.$Time) %>% 
  map(~ group_by(., Type) %>% tally())

......
$`2004`
# A tibble: 2 x 2
   Type     n
  <int> <int>
1     1     1
2     2     1

$`2005`
# A tibble: 3 x 2
   Type     n
  <int> <int>
1     1     4
2     2     3
3     5     1

$`2006`
# A tibble: 2 x 2
......

或者如果您想要称为count而不是n的列,请使用Summary而不是tally

df1 %>% 
  split(.$Time) %>% 
  map(~ group_by(., Type) %>% summarise(count = n()))