Как суммировать проценты строк на основе другого такого же значения строки в R?

#r

#r

Вопрос:

Мой набор данных состоит из вызовов whale. У меня есть две переменные: nclicks и percent. nclicks относится к количеству нажатий в вызове (варьируется от 3 до 30). Процент относится к частоте, с которой этот тип вызовов выполнялся в данном году. Я хотел бы суммировать проценты для более длительных вызовов (с более чем 11 щелчками) и добавить новую строку в dataframe, которая содержит 11 для nclicks и суммированный процент для percent. Затем я хочу удалить строки, которые составляли новую строку.

Я пробовал кодировать «nclicks» как множитель, так и числовое значение. Я использовал комбинации aggregate, rowSums, rbind и т.д., Но безуспешно. Ближе всего я подошел к получению новой строки с суммированными процентами, но мне пришлось указать, какие строки включать вручную (см. Пример ниже). Этот метод также суммировал значения nclicks (поэтому в моем примере ниже я получаю новую строку с 43 (11 12 20 ) в nclicks и 20 в процентах, когда я действительно хочу, чтобы номер строки был равен 4, nclicks — 11 , а процент — 20).

 nclicks=c(3,4,5,11,12,20) 

percent=c(30,30,20,10,5,5) 

df=data.frame(cbind(nclicks,percent)) 

df["11 ",]=df["4",] df["5",] df["6",] 

df=df[-c(4,5,6), ] 

df
  

Это то, что я получаю в итоге:

  nclicks percent
1         3      30
2         4      30
3         5      20
11       43      20
  

Я хочу суммировать проценты строк, для которых значение nclicks равно> 10, но у меня возникают проблемы с выполнением этого. Я не хочу индивидуально указывать, какие значения nclicks включать, потому что некоторые годы имеют много разных значений nclick > 10, в то время как некоторые годы имеют только несколько разных значений> 10.

Ответ №1:

Вы можете создать group столбец, который поможет агрегировать строки, где nclicks>=11 .

 library("tidyverse")

nclicks <- c(3, 4, 5, 11, 12, 20)
percent <- c(30, 30, 20, 10, 5, 5)

df <- tibble(nclicks, percent)
df <- df %>%
  mutate(group = ifelse(nclicks >= 11, "11 ", nclicks)) %>%
  group_by(group) %>%
  summarise_at(vars(nclicks, percent), sum)
df
#> # A tibble: 4 x 3
#>   group nclicks percent
#>   <chr>   <dbl>   <dbl>
#> 1 11         43      20
#> 2 3           3      30
#> 3 4           4      30
#> 4 5           5      20
  

Создано 2019-03-31 пакетом reprex (версия 0.2.1)