сгруппировать по двум наборам переменных в функции

#r #for-loop #dplyr #lapply

#r #для-петли #dplyr #лапли

Вопрос:

Я использую образец набора данных ниже:

 mytable lt;- read.table(text=  "group team num ID 1 a x 1 9 2 a x 2 4 3 a y 3 5 4 a y 4 9 5 b x 1 7 6 b y 4 4 7 b x 3 9 8 b y 2 8",  header = TRUE, stringsAsFactors = FALSE)  

Я хочу создать отдельные фреймы данных для каждого набора переменных, которые я хочу сгруппировать, я также хочу сгруппировать по двум переменным… Я не знаю, как это сделать. Например, мне нужен отдельный фрейм данных, который также группирует данные как по команде, так и по идентификатору… как мне это сделать?

 library(dplyr)  lapply(c("group","team","ID",c("team","ID")), function(x){  group_by(mytable,across(c(x,num)))%gt;%summarise(Count = n()) %gt;% mutate(new=x)%gt;% as.data.frame() })  

Ответ №1:

Посмотри, действительно ли это то, чего ты хочешь.

 library(dplyr)  cols lt;- list("group","team","ID", c("team","ID"))  lapply(cols, function(x, dat = mytable){  dat2 lt;- dat %gt;%  group_by(across({{x}})) %gt;%   summarise(Count = n()) %gt;%   mutate(new = toString(x)) %gt;%   as.data.frame()  return(dat2) })  # `summarise()` has grouped output by 'team'. You can override using the `.groups` argument. # [[1]] # group Count new # 1 a 4 group # 2 b 4 group #  # [[2]] # team Count new # 1 x 4 team # 2 y 4 team #  # [[3]] # ID Count new # 1 4 2 ID # 2 5 1 ID # 3 7 1 ID # 4 8 1 ID # 5 9 3 ID #  # [[4]] # team ID Count new # 1 x 4 1 team, ID # 2 x 7 1 team, ID # 3 x 9 2 team, ID # 4 y 4 1 team, ID # 5 y 5 1 team, ID # 6 y 8 1 team, ID # 7 y 9 1 team, ID  

Комментарии:

1. именно то, что мне нужно, спасибо!!

Ответ №2:

Дает ли это, основываясь на tidyverse, вам то, что вы хотите?

 library(tidyverse)  ytable %gt;%   group_by(team, ID) %gt;%   group_split() lt;list_oflt;  tbl_dflt;  group: character  team : character  num : integer  ID : integer  gt; gt;[7]gt; [[1]] # A tibble: 1 × 4  group team num ID  lt;chrgt; lt;chrgt; lt;intgt; lt;intgt; 1 a x 2 4  [[2]] # A tibble: 1 × 4  group team num ID  lt;chrgt; lt;chrgt; lt;intgt; lt;intgt; 1 b x 1 7  [[3]] # A tibble: 2 × 4  group team num ID  lt;chrgt; lt;chrgt; lt;intgt; lt;intgt; 1 a x 1 9 2 b x 3 9  [[4]] # A tibble: 1 × 4  group team num ID  lt;chrgt; lt;chrgt; lt;intgt; lt;intgt; 1 b y 4 4  [[5]] # A tibble: 1 × 4  group team num ID  lt;chrgt; lt;chrgt; lt;intgt; lt;intgt; 1 a y 3 5  [[6]] # A tibble: 1 × 4  group team num ID  lt;chrgt; lt;chrgt; lt;intgt; lt;intgt; 1 b y 2 8  [[7]] # A tibble: 1 × 4  group team num ID  lt;chrgt; lt;chrgt; lt;intgt; lt;intgt; 1 a y 4 9