#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