【问题标题】:R function to aggregate all elements in a listR函数聚合列表中的所有元素
【发布时间】:2021-12-26 06:34:23
【问题描述】:

使用 tidyverse 包,我可以轻松地聚​​合单个变量。但是,我希望创建一个函数,允许我同时聚合多个变量。

我知道我必须将包含多个变量的数据框转换为一个列表,然后在该列表中应用一个聚合函数。但是,我无法创建此函数。

以下是我正在尝试做的事情的 REPREX:

# Load package

library(dplyr)

# Load dataset

dat <- data.frame(Titanic)

# Select variables

dat <- dat[, c('Class', 'Sex', 'Age','Survived')]

# Aggregate a single variable

dat %>% group_by(Class) %>% summarise(n=n())
        
# Desired outcome: Aggregate all variables simultaneously using a function

dat_ls <- as.list(dat)                       ## Create a list with all the variables
dat_agg <- lapply(dat_ls, function(???))     ## Apply aggregating function to each element in the list

【问题讨论】:

    标签: r function tidyverse


    【解决方案1】:

    有了list,我们可以使用table

    lapply(dat_ls, table)
    

    另一种选择是重塑为“长”格式,然后使用count

    library(dplyr)
    library(tidyr)
    dat %>% 
       pivot_longer(everything()) %>% 
       count(name, value)
    

    【讨论】:

    • 如何将聚合步骤放入可以在 laaply 中使用的函数中?创建函数是我寻求答案的主要内容
    • @kyg 您对dat %&gt;% group_by(Class) %&gt;% summarise(n=n()) 所做的与您对table 所做的相同。 dat_ls 是向量列表。如果你想要一个函数,f1 &lt;- function(x) table(x) 然后使用lapply(dat_ls, f1)
    猜你喜欢
    • 2016-05-02
    • 2021-10-02
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多