聚合字段计数上的R数据帧:类似透视表的结果集

聚合字段计数上的R数据帧:类似透视表的结果集,r,dataframe,pivot-table,R,Dataframe,Pivot Table,我有一个如下结构的数据帧 ChannelId,AuthorId 1,32 28,2393293 2,32 2,32 1,2393293 31,3 3,32 5,4 2,5 我想要的是 AuthorId,1,2,3,5,28,31 4,0,0,0,1,0,0 3,0,0,0,0,0,1 5,0,1,0,0,0,0 32,1,2,0,1,0,0 2393293,1,0,0,0,1,0 有什么方法可以做到这一点吗?也许最简单的方法是:t(表(df)): 如果要使用dplyr::count可以执行

我有一个如下结构的数据帧

ChannelId,AuthorId
1,32
28,2393293
2,32
2,32
1,2393293
31,3
3,32
5,4
2,5
我想要的是

AuthorId,1,2,3,5,28,31
4,0,0,0,1,0,0
3,0,0,0,0,0,1
5,0,1,0,0,0,0
32,1,2,0,1,0,0
2393293,1,0,0,0,1,0

有什么方法可以做到这一点吗?

也许最简单的方法是:
t(表(df))


如果要使用
dplyr::count
可以执行以下操作:

library(dplyr)
library(tidyr)

df %>%
  count(AuthorId, ChannelId) %>% 
  spread(ChannelId, n, fill = 0)
其中:

#Source: local data frame [5 x 7]
#Groups: AuthorId [5]
# 
#  AuthorId     1     2     3     5    28    31
#*    <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1        3     0     0     0     0     0     1
#2        4     0     0     0     1     0     0
#3        5     0     1     0     0     0     0
#4       32     1     2     1     0     0     0
#5  2393293     1     0     0     0     1     0
#来源:本地数据帧[5 x 7]
#分组:AuthorId[5]
# 
#作者12352831
#*          
#1        3     0     0     0     0     0     1
#2        4     0     0     0     1     0     0
#3        5     0     1     0     0     0     0
#4       32     1     2     1     0     0     0
#5  2393293     1     0     0     0     1     0

可以使用指定边距的公式调用xtabs函数:

 xtabs( ~ AuthorId+ChannelId, data=dat)

         ChannelId
AuthorId  1 2 28 3 31 5
  2393293 1 0  1 0  0 0
  3       0 0  0 0  1 0
  32      1 2  0 1  0 0
  4       0 0  0 0  0 1
  5       0 1  0 0  0 0

我们还可以使用
data.table
中的
dcast
。将“data.frame”转换为“data.table”,并使用
dcast
fun.aggregate
作为
length

library(data.table)
dcast(setDT(df1), AuthorId~ChannelId, length)
#   AuthorId 1 2 3 5 28 31
#1:        3 0 0 0 0  0  1
#2:        4 0 0 0 1  0  0
#3:        5 0 1 0 0  0  0
#4:       32 1 2 1 0  0  0
#5:  2393293 1 0 0 0  1  0

您是否尝试过
?表
。。正如在
t(表(df))
?@stevenbaupré中一样,我不想将ChannelId作为头传递。我玩了聚合,dplyr.count和count,但没有运气。你不应该至少加载一个
dplyr
tidyr
,以便
%%
工作吗?
library(data.table)
dcast(setDT(df1), AuthorId~ChannelId, length)
#   AuthorId 1 2 3 5 28 31
#1:        3 0 0 0 0  0  1
#2:        4 0 0 0 1  0  0
#3:        5 0 1 0 0  0  0
#4:       32 1 2 1 0  0  0
#5:  2393293 1 0 0 0  1  0