у меня есть dataframe df
с тремя категориальными переменными cat1
, cat2
, cat3
и двумя непрерывными переменных con1
, con2
. Я хотел бы рассчитать список функций sd
, mean
в перечне столбцов con1
, con2
на основе различных комбинаций перечня столбцов cat1
, cat2
, cat3
. Я сделал их явно подмножество всех разных комбинаций.Применить Список функций в списке столбцов на основе различных комбинаций
# Random generation of values for categorical data
set.seed(33)
df <- data.frame(cat1 = sample(LETTERS[1:2], 100, replace=TRUE),
cat2 = sample(LETTERS[3:5], 100, replace=TRUE),
cat3 = sample(LETTERS[2:4], 100, replace=TRUE),
con1 = runif(100,0,100),
con2 = runif(100,23,45))
# Introducing null values
df$con1[c(23,53,92)] <- NA
df$con2[c(33,46)] <- NA
results <- data.frame()
funs <- list(sd=sd, mean=mean)
# calculation of mean and sd on total observations
sapply(funs, function(x) sapply(df[,c(4,5)], x, na.rm=T))
# calculation of mean and sd on different levels of cat1
sapply(funs, function(x) sapply(df[df$cat1=='A',c(4,5)], x, na.rm=T))
sapply(funs, function(x) sapply(df[df$cat1=='B',c(4,5)], x, na.rm=T))
# calculation of mean and sd on different levels of cat1 and cat2
sapply(funs, function(x) sapply(df[df$cat1=='A' & df$cat2=='C' ,c(4,5)], x, na.rm=T))
.
.
.
sapply(funs, function(x) sapply(df[df$cat1=='B' & df$cat2=='E' ,c(4,5)], x, na.rm=T))
# Similarly for the combinations of three cat variables cat1, cat2, cat3
Я хотел бы написать функцию для динамического вычисления списка функций для списка столбцов на основе разных комбинаций. Не могли бы вы дать несколько предложений. Благодаря !
Редактировать: У меня уже есть некоторые разумные предложения, используя dplyr
. Было бы здорово, если бы кто-то предоставил предложения с использованием семейных функций apply
, поскольку это поможет в их использовании (dataframes) в дополнительных требованиях.
Вы можете попробовать 'библиотека (dplyr); df%>% group_by (cat1, cat2, cat3)%>% summaryise_each (c ("sd", "mean")) 'и больше узнать о'? summaryise_each' –
@docendodiscimus Умное решение. У меня есть небольшой вопрос. Когда мне нужно только применять функции на 'con1',' con2' на основе 'cat1',' cat2', он также вычисляет среднее значение и sd cat3. Как этого избежать? Я использовал 'df%>% group_by (cat1, cat2)%>% summaryise_each (funs (mean (., Na.rm = TRUE), sd (., Na.rm = TRUE))) – Prradep
Существуют разные варианты для выбора/отмены выбора определенных столбцов, например, вы могли бы выполнить команду 'df%>% group_by (cat1, cat2)%>% summaryise_each (funs (mean (., na.rm = TRUE), sd (., na.rm = TRUE)), -cat3) 'или' df%>% group_by (cat1, cat2)%>% summaryise_each (funs (mean (., na.rm = TRUE), sd (., na.rm = TRUE)), starts_with ("против")) '. Для получения дополнительной информации см. Специальные функции, упомянутые в '? Select', из dplyr. –