gpt4 book ai didi

r - 应用 group_by 和 summarise(sum) 但保留大量附加列

转载 作者:行者123 更新时间:2023-12-04 15:24:39 26 4
gpt4 key购买 nike

我想按一个变量对我的数据框进行分组,总结另一个变量,但保留所有其他关联的列。

Applying group_by and summarise on data while keeping all the columns' info接受的答案是使用 filter() 或 slice(),如果答案已经存在于数据中(即最小值、最大值),这可以正常工作,但如果您想使用生成新答案的函数,则这不起作用(即总和、平均值)。

Applying group_by and summarise(sum) but keep columns with non-relevant conflicting data?接受的答案是使用您希望保留的所有列作为分组变量的一部分。但如果您想要保留许多列,这似乎是一个无效的解决方案。例如,我正在处理的数据有 26 个额外的列。

我想到的最佳解决方案是拆分-应用-组合。但这看起来很笨拙 - 当然必须有一个可以在单个管道中完成的解决方案。

例子:

location <- c("A", "A", "B", "B", "C", "C")
date <- c("1", "2", "1", "2", "1", "2")
count <- c(3, 6, 4, 2, 7, 5)
important_1 <- c(1,1,2,2,3,3)
important_30 <- c(4,4,5,5,6,6)

df <- data.frame(location = location, date = date, count = count, important_1 = important_1, important_30 = important_30)

我想总结同一地点不同日期发生的计数。我想保留所有重要的内容(假设有 30 个而不是 2 个)。

到目前为止我的解决方案:

check <- df %>%
group_by(location) %>%
summarise(count = sum(count))

add2 <- df %>%
select(-count, -date) %>%
distinct()

results <- merge(check, add2)

有没有一种方法可以在单个管道中完成此操作?我宁愿保持井井有条,并尽可能避免创建新对象。

最佳答案

我们可以用mutate创建一个列,然后应用distinct

library(dplyr)
df %>%
group_by(location) %>%
mutate(count = sum(count)) %>% select(-date) %>%
distinct(location, important_1, important_30, .keep_all = TRUE)

如果有多个列名,我们也可以使用syms转为symbol并求值(!!!)

df %>% 
group_by(location) %>%
mutate(count = sum(count)) %>% select(-date) %>%
distinct(location, !!! rlang::syms(names(.)[startsWith(names(.), 'important')]), .keep_all = TRUE)

关于r - 应用 group_by 和 summarise(sum) 但保留大量附加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62523534/

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