我以前从未在StackOverflow上问过问题,所以我会尽可能清楚,但如果我做错了什么或遗漏了什么,请给我任何提示。
我正在研究一位艺术家在平台上最初几个月的收听次数对他们后来受欢迎程度的影响。我想使用艺术家在平台上的前三个月的信息,但前提是这三个月在前六个月内。这样,你可以使用关于艺术家的等量信息(3个月(,我不必等太久就可以从平台上收集信息(6个月(。如果前3个月是连续的,我只想对计数求和。
我的数据如下:
my.df = data.frame(Artist = c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C'),
Month = c('1', '9', '18', '4', '5', '6', '1', '2', '3', '4'),
Count = c('2', '1', '1', '2', '2', '2', '2', '7', '79', '1'),
Index = c('1', '2', '3', '1', '2', '3', '1', '2', '3', '4'))
在这里,艺术家当然就是艺术家,每个艺术家的月份顺序越来越多,计数是艺术家在某个月内的流量。我自己添加了Index变量。我觉得这对我的问题有帮助。这是艺术家在第n个月进行流媒体播放的标志。
我基本上想让代码说如下:如果艺术家的前三个指数发生在前六个月,那么将前三个月的计数相加。
预期输出为:
艺术家 | |
---|---|
B | 6 |
C | 88 |
使用tidyverse
可以完成此操作。。。
library(dplyr)
df %>% group_by(Artist) %>% #group by artist
filter(Month <= 6) %>% #remove any after 6 months
arrange(Month) %>% #make sure sorted by Month
slice_head(n = 3) %>% #take the first three entries
summarise(Count = ifelse(last(Month) == first(Month) + 2, #if consecutive then...
sum(Count), NA)) #sum of Count, otherwise NA
# A tibble: 3 x 2
Artist Count
<chr> <int>
1 A NA
2 B 6
3 C 88