Группировка и суммирование аналогичных строк в R

#r #dataframe #dplyr #grouping #transformation

Вопрос:

Итак, у меня есть этот фрейм данных:

 # A tibble: 268 x 7
 Age   Facebook_likes Instagram_likes Twitter_likes Tiktok_likes Reddit_likes
 <chr>          <dbl>           <dbl>         <dbl>        <dbl>        <dbl>
1 18-24              1               1             0            0            0
2 <18                0               0             0            0            0
3 18-24              1               1             1            0            0
4 18-24              0               0             0            0            0
5 18-24              0               0             0            0            0
6 25-34              0               1             0            0            0
7 18-24              1               1             0            0            0
8 18-24              0               1             0            0            0
9 25-34              0               0             0            0            1
10 18-24              1               0             0            0            0
# ... with 258 more rows, and 1 more variable:

 

переменная возраста имеет только 4 наблюдения ( <18, 18-24, 25-34, 35>).
Что я хочу сделать, так это преобразовать этот фрейм данных таким образом, чтобы у меня были только эти 4 строки, каждая переменная которых является суммой. Например : в первой сетке ( первый столбец x первая строка ) будет указана сумма лайков на Facebook для тех, кто. :

 # 
   Age   Facebook_likes                     Instagram_likes Twitter_likes Tiktok_likes Reddit_likes
   <chr>          <dbl>                              <dbl>         <dbl>        <dbl>        <dbl>
 1 <18    sum(facebook_likes for those <18)               
 2 18-24                
 3 25-34            
 4 >35           
 
 

Ответ №1:

Мы можем использовать summarise с across в tidyverse после группировки по «Возрасту»

 library(dplyr)
df1 %>%
  group_by(Age) %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))
 

Ответ №2:

данные.таблица

library(data.table)

cols_likes <- grep("_likes$", names(df), value = TRUE)

или

cols_likes <- sapply(df, is.numeric)

setDT(df)[, lapply(.SD, sum, na.rm = TRUE), by = Age, .SDcols = cols_likes]