Настроить lapply () в R - PullRequest
0 голосов
/ 27 мая 2020

Я хотел бы настроить lapply(df, FUN = mean)

, это отлично работает,

mtcars
means.mtcars <- lapply(mtcars, FUN = mean)

, но я хочу увидеть prop.table(table(df$column)) и сохранить их как другую строку в зависимости от ее разных уровни

mtcars$gear1 <- factor(mtcars$gear, levels = c(3,4,5))

my.mean <- function(df) {
   ifelse(is.numeric(df)== T, mean(df),
   ifelse(df$gear1 == 3, df$newColumn1 ==  as.data.frame(prop.table(table(df$gear1)))[1, "Freq"],
      ifelse( df$gear1 == 4, df$newColumn2 ==  as.data.frame(prop.table(table(df$gear1)))[2, "Freq"],
              df$newColumn3 == as.data.frame(prop.table(table(df$gear1)))[3, "Freq"]  )))
}

not.working <- lapply(mtcars, FUN = my.mean)

Ожидаемые результаты означает mtcars и в конце newColumn1, newColumn2, newColumn3

            V1
mpg   20.090625
cyl    6.187500
disp 230.721875
hp   146.687500
drat   3.596563
wt     3.217250
qsec  17.848750
vs     0.437500
am     0.406250
gear   3.687500
carb   2.812500
newColumn1  0.46875
newColumn2  0.37500
newColumn3  0.15625 

заранее большое спасибо

1 Ответ

2 голосов
/ 27 мая 2020

Когда вы используете lapply, вы применяете функцию к каждому столбцу изолированно во фрейме данных. Проблема здесь в том, что вы хотите, чтобы один из столбцов был разделен на три, что lapply не делает напрямую. Тем не менее, это легко обойти:

my.mean <- function(x) if(is.numeric(x)) mean(x) else prop.table(table(x))
setNames(as.data.frame(unlist(lapply(mtcars, FUN = my.mean))), "mean")
#>               mean
#> mpg      20.090625
#> cyl       6.187500
#> disp    230.721875
#> hp      146.687500
#> drat      3.596563
#> wt        3.217250
#> qsec     17.848750
#> vs        0.437500
#> am        0.406250
#> gear      3.687500
#> carb      2.812500
#> gear1.3   0.468750
#> gear1.4   0.375000
#> gear1.5   0.156250

Создано 27 мая 2020 г. пакетом REPEX (v0.3.0)

...