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

应用group_by并汇总数据,同时保留所有列的信息

韦阳辉
2023-03-14

我有一个包含22000行和25列的大型数据集。我试图根据其中一列对我的数据集进行分组,并根据分组后的数据集获取另一列的min值。但是,问题是它只给我两列,其中包含分组后的列和具有min值的列……但是我需要与具有min值的行相关的其他列的所有信息。这里有一个简单的示例,只是为了使其可重现:

    data<- data.frame(a=1:10, b=c("a","a","a","b","b","c","c","d","d","d"), c=c(1.2, 2.2, 2.4, 1.7, 2.7, 3.1, 3.2, 4.2, 3.3, 2.2), d= c("small", "med", "larg", "larg", "larg", "med", "small", "small", "small", "med"))

    d<- data %>%
    group_by(b) %>%
    summarise(min_values= min(c))
    d
    b min_values
    1 a        1.2
    2 b        1.7
    3 c        3.1
    4 d        2.2

因此,我还需要与列a和d相关的信息,但是,由于列c中的值存在重复,我无法基于min_value列合并它们……我想知道在使用dplyr包时是否有任何方法保留其他列的信息。

我在这里找到了一些解释“dplyr:group_by、子集和摘要”和这里“使用group_by和摘要在子组中查找百分比”,但没有一个解决我的问题。

共有3个答案

濮冠宇
2023-03-14

使用sqldf

library(sqldf)
 # Two options:
sqldf('SELECT * FROM data GROUP BY b HAVING min(c)')
sqldf('SELECT a, b, min(c) min, d FROM data GROUP BY b')

输出:

   a b   c     d
1  1 a 1.2 small
2  4 b 1.7  larg
3  6 c 3.1   med
4 10 d 2.2   med
符正信
2023-03-14

这里有两个选项:a)<代码>过滤器c中都没有重复的最小值,因此a)和b)的结果相同。如果存在重复的最小值,方法a)将返回每个组的每个最小值,而b)将仅返回每个组中的一个最小值(第一个)。

> data %>% group_by(b) %>% filter(c == min(c))
#Source: local data frame [4 x 4]
#Groups: b
#
#   a b   c     d
#1  1 a 1.2 small
#2  4 b 1.7  larg
#3  6 c 3.1   med
#4 10 d 2.2   med

或类似

> data %>% group_by(b) %>% filter(min_rank(c) == 1L)
#Source: local data frame [4 x 4]
#Groups: b
#
#   a b   c     d
#1  1 a 1.2 small
#2  4 b 1.7  larg
#3  6 c 3.1   med
#4 10 d 2.2   med

b)

> data %>% group_by(b) %>% slice(which.min(c))
#Source: local data frame [4 x 4]
#Groups: b
#
#   a b   c     d
#1  1 a 1.2 small
#2  4 b 1.7  larg
#3  6 c 3.1   med
#4 10 d 2.2   med
司徒志
2023-03-14

您可以使用< code>group_by而不使用< code > summary :

data %>%
  group_by(b) %>%
  mutate(min_values = min(c)) %>%
  ungroup()
 类似资料:
  • 我的问题非常类似于在保留所有列信息的同时对数据应用group_by和摘要,但我想保留被排除的列,因为它们在分组后发生冲突。 到这里为止,我得到了我想要的。现在我想包含列类型,尽管它被排除在外,因为值是冲突的。这是我想得到的结果 我已经尝试了< code>ungroup()和一些< code>mutate和< code>unite的变体,但都无济于事,任何建议都将不胜感激

  • 我想将两个哈希数组合并到一个新数组中: 现在这就是我正在寻找的结果: 我在Ruby文档中唯一能找到的合并选项是用另一个散列覆盖重复项。那么如何才能达到我需要的版本呢?

  • 我想按变量对数据框进行分组,汇总另一个变量,但保留所有其他关联列。 在对数据应用group_by和SUMMISE,同时保留所有列的信息时,接受的答案是使用filter()或slice(),如果答案已经存在于数据中(即min,max),则这很好,但如果您希望使用生成新答案(即sum,mean)的函数,则这不起作用。 在应用group_by和sum(sum)时,但保留包含不相关的冲突数据的列?公认的答

  • 在网上找不到任何资源,但我正在尝试优化我们的内部组件库,我正在尝试使树摇床更友好。 我怎样才能离开罗洛普。输出中的css文件以及在文件中维护它们的导入。 即E 输出。 这似乎是尽可能直截了当的,iv'e发现了类似的线索,但没有回应。https://github.com/egoist/rollup-plugin-postcss/issues/204 允许这样做基本上意味着使用我的项目的人只会自动获得

  • 问题内容: 我有一张表,上面有一些植物的记录。植物可以具有多个名称,该表将其显示为不同的记录。该表称为new_plantsname 这继续超过3000条记录 我想要的是将具有相同Plantid的记录组合在一起,并在不同的列中显示不同的名称: 等等 我也想将结果保存到新表中 问题答案: 基本上,这是一个(您未指定RDBMS)我假设MySQL并且它没有函数,因此您将需要使用带有语句的聚合函数来复制它。

  • 我有两个熊猫数据帧共享一个共同的列名。我想合并公共列名,但保留与第二个dataFrame中的所有不同列,其中公共列名称匹配。下面是两个数据帧的示例: 我希望预期的结果是: 也就是说,当列“A”匹配时,我希望保留I,J,K,L的行,并且不等于“NaN ”,对于DF1中的列也是如此。 我已经尝试了所有的pd.merge选项,但是它们似乎没有做我上面要求的事情。例如, 在“A”上匹配并将所有键保留在左侧