Разделение фрейма данных кажется контрпродуктивным.Вместо этого используйте парадигму split-apply-объединить, например, сгенерировать некоторые данные
df = data.frame(grp=sample(letters, 100, TRUE), x=rnorm(100))
, затем разбить только соответствующие столбцы и применить функцию scale()
к x в каждой группе и объединить результатыsplit<-
или ave
)
df$z = 0
split(df$z, df$grp) = lapply(split(df$x, df$grp), scale)
## alternative: df$z = ave(df$x, df$grp, FUN=scale)
Это будет очень быстро по сравнению с разбиением data.frames, и результат останется пригодным для последующего анализа без итерации.Я думаю, что синтаксис dplyr
library(dplyr)
df %>% group_by(grp) %>% mutate(z=scale(x))
В общем, это решение dplyr быстрее, чем разбиение фреймов данных, но не так быстро, как split-apply-Объединить.