当前位置: 首页 > 知识库问答 >
问题:

应用group_by和SUMMISE(sum),但保留大量附加列

于意智
2023-03-14

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

在对数据应用group_by和SUMMISE,同时保留所有列的信息时,接受的答案是使用filter()或slice(),如果答案已经存在于数据中(即min,max),则这很好,但如果您希望使用生成新答案(即sum,mean)的函数,则这不起作用。

在应用group_by和sum(sum)时,但保留包含不相关的冲突数据的列?公认的答案是使用您希望保留的所有列作为分组变量的一部分。但是如果您有许多想要保留的列,这似乎是一个无效的解决方案。例如,我正在处理的数据有26个附加列。

我想出的最好的解决方案是html" target="_blank">拆分 - 应用 - 合并。但这似乎很笨拙 - 当然必须有一个可以在单个管道中完成的解决方案。

例子:

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)

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

共有2个答案

倪风史
2023-03-14

您可以使用<code>group_by<code>count。

library(dplyr)

df %>% 
  group_by(location, important_1, important_30) %>% 
  summarise(count = sum(count))


#  location important_1 important_30 count
#  <chr>          <dbl>        <dbl> <dbl>
#1 A                  1            4     9
#2 B                  2            5     6
#3 C                  3            6    12
松兴邦
2023-03-14

我们可以使用mutate创建一个列,然后应用不同的

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

如果有多个列名,我们还可以使用<code>符号

df %>% 
     group_by(location) %>% 
     mutate(count = sum(count)) %>% select(-date) %>% 
    distinct(location, !!! rlang::syms(names(.)[startsWith(names(.), 'important')]), .keep_all = TRUE)
 类似资料:
  • 我的问题非常类似于在保留所有列信息的同时对数据应用group_by和摘要,但我想保留被排除的列,因为它们在分组后发生冲突。 到这里为止,我得到了我想要的。现在我想包含列类型,尽管它被排除在外,因为值是冲突的。这是我想得到的结果 我已经尝试了< code>ungroup()和一些< code>mutate和< code>unite的变体,但都无济于事,任何建议都将不胜感激

  • 我有一个包含22000行和25列的大型数据集。我试图根据其中一列对我的数据集进行分组,并根据分组后的数据集获取另一列的min值。但是,问题是它只给我两列,其中包含分组后的列和具有min值的列……但是我需要与具有min值的行相关的其他列的所有信息。这里有一个简单的示例,只是为了使其可重现: 因此,我还需要与列a和d相关的信息,但是,由于列c中的值存在重复,我无法基于min_value列合并它们……我

  • 我已经导出了变量,以确保即使在shell的新实例中,变量也会被持久化,但它不起作用。。。我不知道该怎么做。我做了大量的研究和测试,没有得出结论。 Dockerfile: 确保每次运行

  • 问题内容: 我需要处理一个CSV文件,并且对于每个记录(行)都保留一个实体。现在,我这样做: 该方法基本上只是一个调用。CSV文件中大约有20,000个实体(行)。这是一种有效的方法吗?似乎很慢。使用会更好吗?这个解决方案有任何缺陷吗? 编辑 这是一个漫长的过程(超过400秒)和我都尝试的解决方案,与和。两者花费的时间大致相同(459s与443s)。问题是,像这样一个接一个地保存实体是否最佳。据我

  • 是否可以使用任何log4j附加程序编写具有特定循环时间和保留限制的日志。 目标是: 每天都有一个日志文件;在午夜为新日志创建新文件 保留日志文件并在一定时间后自动删除;因此删除早于X天(例如30天)的日志文件 旋转似乎是可能的,但对于log4j,保留时间的限制是不可能的

  • 我试图读取一个带有引号的csv文件 阅读csv删除了引号,因此我最终得到了 有人知道我如何保留引号吗?