使用apply在R中的多个列上运行函数

使用apply在R中的多个列上运行函数,r,R,我正在尝试收集一些变量(列)的汇总统计数据,这些变量已经被分类变量分组。我希望使用apply函数,而不是为每个变量单独编写代码 下面是我想使用的函数,不添加任何应用程序: library(dplyr) group_by(my_data, group) %>% summarise( count = n(), mean = mean(weight, na.rm = TRUE), sd = sd(weight, na.rm = TRUE) ) 我知道这是一个相当

我正在尝试收集一些变量(列)的汇总统计数据,这些变量已经被分类变量分组。我希望使用
apply
函数,而不是为每个变量单独编写代码

下面是我想使用的函数,不添加任何应用程序:

library(dplyr)
group_by(my_data, group) %>%
  summarise(
    count = n(),
    mean = mean(weight, na.rm = TRUE),
    sd = sd(weight, na.rm = TRUE)
  )
我知道这是一个相当新的问题,但我正在使用各种应用教程努力解决它。我觉得这件事很棘手,因为有管道

干杯

baser:

data.frame(do.call("rbind", lapply(split(df, df$car_brand), function(x){

        data.frame(

        car_brand = x$car_brand,

        counter = nrow(x),

        avg = mean(x$hp, na.rm = T),

        std_dev = ifelse(is.na(sd(x$hp, na.rm = T)), 0, sd(x$hp, na.rm = T)))

      }

    )

  ),

row.names = NULL

)
数据:

df <- data.frame(car_type = row.names(mtcars), 
                 car_brand = gsub(" .*", "", row.names(mtcars)),
                 mtcars, row.names = NULL)
df基于公式的函数,例如
lm
aov
等,在
group\u by
方面存在问题,如您所见,因此,这里有一种方法使用
purr::map.*
group\u split

library(dplyr)
library(purrr)
nms <- c('wt','qsec')
#loop over nms and apply the 2nd part, so .x will take 'wt' then `qsec` 
map_dfc(nms, 
        ~mtcars %>% 
          group_split(cyl) %>% 
          map_df(function(y) y %>%
                   summarise(!!quo_name(paste0("mean_",.x)):=mean(y[[.x]]),
                             !!quo_name(paste0("pval_",.x)):=summary(aov(as.formula(paste(.x,"~am")), data=y))[[1]]$`Pr(>F)`[1]
                              )
                  )
        )

# A tibble: 3 x 4
  mean_wt pval_wt mean_qsec pval_qsec
    <dbl>   <dbl>     <dbl>     <dbl>
1    2.29 0.0104       19.1  0.0166  
2    3.12 0.00101      18.0  0.00514 
3    4.00 0.218        16.8  0.000834
库(dplyr)
图书馆(purrr)
nms%
组分割(气缸)%>%
map_df(功能(y)y%>%
总结(!!quo_名称(粘贴0(“平均值,.x)):=平均值(y[.x]]),
!!quo_name(paste0(“pval_”),.x)):=summary(aov(as.formula(paste(.x,“~am”)),data=y))[[1]]$`Pr(>F)`[1]
)
)
)
#一个tibble:3x4
平均值pval平均值pval平均值qsec
1    2.29 0.0104       19.1  0.0166  
2    3.12 0.00101      18.0  0.00514 
3    4.00 0.218        16.8  0.000834

请参见
处的总结和总结所有非常有效,谢谢!作为另外一个问题,我现在想对上述各组的每个变量进行方差分析,而无需重新编写代码。可能吗?