【问题标题】:Aggregate R data frame over count of a field: Pivot table-like result set [duplicate]在字段计数上聚合 R 数据帧:类似于数据透视表的结果集 [重复]
【发布时间】:2016-11-19 03:38:30
【问题描述】:

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

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

有没有办法做到这一点?

【问题讨论】:

  • 你试过?table .. 和t(table(df)) 一样吗?
  • @StevenBeaupré 我不知道将 ChannelId 作为标题传递。我玩过聚合、dplyr.count 和 count 但没有运气。

标签: r dataframe pivot-table


【解决方案1】:

我们也可以从data.table 使用dcast。将“data.frame”转换为“data.table”并使用dcastfun.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

【讨论】:

    【解决方案2】:

    可以使用指定边距的公式调用 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
    

    【讨论】:

      【解决方案3】:

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

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

      如果你想使用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
      

      【讨论】:

      • 您是否应该至少加载dplyrtidyr 之一以使%&gt;% 工作?
      猜你喜欢
      • 2020-10-13
      • 1970-01-01
      • 2016-04-10
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      相关资源
      最近更新 更多