dplyr,总结分类变量

5

我想使用dplyr,为每个不同的视频ID small 汇总我的数据。

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

mean(Category)显然是错误的做法。我应该如何让它只使用重复多次的值(一个video.id无论在数据框中出现多少次,其category始终相同)。

我的数据框看起来像这样:

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"))

1
请将 dput(head(small)) 的输出复制并粘贴到问题中,以使其更具可重现性。同时分享一个预期输出的小例子。 - kath
我希望这能有所帮助,我还不知道如何产生预期的输出。 - hmmmbob
1
@hmmmbob,我建议您可以使用 count 函数来统计类别数量。举个例子,针对每个类别统计有多少视频。 - MKR
2个回答

6
你至少有两种解决方案:
1. 将“类别”列添加到你的 group_by 语句中。
2. 在你的查询结果中使用 DISTINCT 关键字,以确保每个类别只出现一次。
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有多个类别的情况。

1

由于每个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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接