【问题标题】:dplyr, summarise categorical variabledplyr,汇总分类变量
【发布时间】:2018-10-22 23:24:16
【问题描述】:

我想使用dplyr为每个不同的video.id总结我的数据small

small %>% 
  group_by(Video.ID) %>% 
  summarise(sumr = sum(Partner.Revenue),
            len = mean(Video.Duration..sec.),
            cat = mean(Category))

mean(Category) 显然是错误的方法。如何仅使用重复多次的值来获取它(一个 video.id 始终具有相同的类别,无论它在数据帧中出现的频率如何)。

我的数据框如下所示:

small

# A tibble: 6 x 7
     X1  X1_1 Video.ID    Video.Duration..sec. Category Owned.Views Partner.Revenue
  <int> <int> <chr>                      <int> <chr>          <int>           <dbl>
1     1     1 ---0zh9uzSE                 1184 gadgets            6               0
2     2     2 ---0zh9uzSE                 1184 gadgets            6               0
3     3     3 ---0zh9uzSE                 1184 gadgets            2               0
4     4     4 ---0zh9uzSE                 1184 gadgets            1               0
5     5     5 ---0zh9uzSE                 1184 gadgets            1               0
6     6     6 ---0zh9uzSE                 1184 gadgets            3               0

small <- 
  structure(list(X1 = 1:6, 
                 X1_1 = 1:6, 
                 Video.ID = c("---0zh9uzSE", "---0zh9uzSE", "---0zh9uzSE", "---0zh9uzSE", "---0zh9uzSE", "---0zh9uzSE"), 
                 Video.Duration..sec. = c(1184L, 1184L, 1184L, 1184L, 1184L, 1184L), 
                 Category = c("gadgets", "gadgets", "gadgets", "gadgets", "gadgets", "gadgets"), 
                 Owned.Views = c(6L, 6L, 2L, 1L, 1L, 3L), 
                 Partner.Revenue = c(0, 0, 0, 0, 0, 0)), 
            row.names = c(NA, -6L), 
            class = c("tbl_df", "tbl", "data.frame"))

【问题讨论】:

  • 请将dput(head(small)) 的输出复制并粘贴到问题中,以使其更好reproducible。并分享一个预期输出的小例子。
  • 我希望能有所帮助,我还不知道如何产生预期的输出。
  • @hmmmbob 我建议您可以对类别使用计数。每个类别有多少个视频。

标签: r dplyr


【解决方案1】:

你至少有两个选择来解决这个问题:

将类别列添加到您的group_by

small %>% 
  group_by(Video.ID, cat = Category) %>% 
  summarise(sumr = sum(Partner.Revenue),
            len = mean(Video.Duration..sec.))

# A tibble: 1 x 4
# Groups:   Video.ID [?]
#     Video.ID    cat      sumr   len
#     <chr>       <chr>   <dbl> <dbl>
#   1 ---0zh9uzSE gadgets     0  1184

或使用unique(Catregory):

small %>% 
  group_by(Video.ID) %>% 
  summarise(sumr = sum(Partner.Revenue),
            len = mean(Video.Duration..sec.),
            cat = unique(Category))

# A tibble: 1 x 4
#   Video.ID     sumr   len cat    
#   <chr>       <dbl> <dbl> <chr>  
# 1 ---0zh9uzSE     0  1184 gadgets

第一个选项可能是首选,因为如果每个 id 有多个类别,它仍然有效。

【讨论】:

    【解决方案2】:

    由于它是每个video_id 的唯一类别,因此您可以拥有cat = Category[1],如

    small %>% group_by(Video.ID) %>% 
          summarise(sumr=sum(Partner.Revenue), len = mean(Video.Duration..sec.), 
          cat = Category[1])
    
    # A tibble: 1 x 4
    #  Video.ID     sumr   len cat    
    #  <chr>       <dbl> <dbl> <chr>  
    #  1 ---0zh9uzSE     0  1184 gadgets
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2019-08-20
      • 2021-01-20
      • 2019-01-27
      • 2018-07-31
      • 1970-01-01
      相关资源
      最近更新 更多