簡體   English   中英

R:如何根據比較列對行求和

[英]R: How do I sum rows based on comparing columns

我以前從未在 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 個月。

我基本上希望代碼說明以下內容:如果藝術家的前三個索引出現在前六個月,則將前三個月的計數相加。

預期的 output 將是:

藝術家 數數
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM