我有一个数据帧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”符号外,其他所有内容都几乎相同。
我想知道自己做错了什么以及如何解决。
答案 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()))