Вы можете полностью избежать for-l oop.
Объяснение:
Здесь, используя lapply
Я зацикливаюсь по всем столбцам (используя их имена) для суммирования, кроме первого, который используется для группировки (смотрите, что возвращает names(df1)[-1]
).
with
функция в основном присоединяет фрейм данных, поэтому вам не нужно чтобы сделать dataframe$column
, и вы можете просто ввести имя столбца.
by(variable to function, grouping variable, function)
используется для применения summary
по группам.
Нам нужно использовать имя столбца как переменную, а не как символ. Вот почему я использую mget()
для преобразования имени символа столбца в переменную.
smry.ls.df1 <- lapply(names(df1)[-1], function(col) with(df1, by(mget(col), Group, summary)))
names(smry.ls.df1) <- paste0("Eval.", names(df1)[-1]) #setting the names as you've shown
smry.list.df1
#> $Eval.Num.Hats
#> Group: a
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 6 6 6 6 6 6
#> --------------------------------------------------------
#> Group: b
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 4.00 5.25 6.50 6.50 7.75 9.00
#> --------------------------------------------------------
#> Group: c
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 10.00 10.25 10.50 10.50 10.75 11.00
#>
#> $Eval.Num.Balls
#> Group: a
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 1 1 1 1 1 1
#> --------------------------------------------------------
#> Group: b
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 3 3 3 3 3 3
#> --------------------------------------------------------
#> Group: c
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 5.00 5.25 5.50 5.50 5.75 6.00
Если вы хотите, чтобы они были сохранены как отдельные объекты (не рекомендуется), вы можете использовать list2env
:
list2env(smry.list.df1, globalenv())
Данные:
df1 <- data.frame(Group = c( "a", "b", "c", "b", "c"),
Num.Hats = c( 6, 4, 10, 9, 11),
Num.Balls = c( 1, 3, 5, 3, 6))