gpt4 book ai didi

r - 使用dplyr摘要对多个列进行不同的操作

转载 作者:行者123 更新时间:2023-12-01 00:20:43 25 4
gpt4 key购买 nike

好吧,我知道已经有成千上万的相关问题,但是没有一个可以回答我的特殊需求。

我想在具有50列的表上使用dplyr“summaryize”,并且我需要对这些列应用不同的摘要函数。

“Summarize_all”和“summarize_at”似乎都具有以下缺点:无法将不同的函数应用于变量的不同子组。

例如,假设虹膜数据集将有50列,因此我们不想按名称寻址列。我想要前两列的总和,第三列的均值和所有其余列的第一个值(在group_by(Species)之后)。我该怎么办?

最佳答案

正如其他人所提到的,这通常是通过对要应用汇总功能的每组列调用summarize_each/summarize_at/summarize_if来完成的。据我所知,您将必须创建一个自定义函数来对每个子集进行汇总。例如,您可以通过使用选择助手(例如contains())来设置名称,以仅过滤要对其应用功能的列。如果不是,则可以设置要汇总的特定列号。

对于您提到的示例,您可以尝试以下操作:

summarizer <- function(tb, colsone, colstwo, colsthree, 
funsone, funstwo, funsthree, group_name) {

return(bind_cols(
summarize_all(select(tb, colsone), .funs = funsone),
summarize_all(select(tb, colstwo), .funs = funstwo) %>%
ungroup() %>% select(-matches(group_name)),
summarize_all(select(tb, colsthree), .funs = funsthree) %>%
ungroup() %>% select(-matches(group_name))
))

}

#With colnames
iris %>% as.tibble() %>%
group_by(Species) %>%
summarizer(colsone = contains("Sepal"),
colstwo = matches("Petal.Length"),
colsthree = c(-contains("Sepal"), -matches("Petal.Length")),
funsone = "sum",
funstwo = "mean",
funsthree = "first",
group_name = "Species")

#With indexes
iris %>% as.tibble() %>%
group_by(Species) %>%
summarizer(colsone = 1:2,
colstwo = 3,
colsthree = 4,
funsone = "sum",
funstwo = "mean",
funsthree = "first",
group_name = "Species")

关于r - 使用dplyr摘要对多个列进行不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48944369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com