应用group#U by并汇总数据,同时保留所有列';信息
我有一个22000行25列的大型数据集。我试图根据其中一列对数据集进行分组,并根据分组后的数据集获取另一列的最小值。但是,问题是它只给我两列,其中包含分组列和具有最小值的列。。。但是我需要与具有最小值的行相关的其他列的所有信息。 下面是一个简单的示例,旨在使其可复制:应用group#U by并汇总数据,同时保留所有列';信息,r,dplyr,R,Dplyr,我有一个22000行25列的大型数据集。我试图根据其中一列对数据集进行分组,并根据分组后的数据集获取另一列的最小值。但是,问题是它只给我两列,其中包含分组列和具有最小值的列。。。但是我需要与具有最小值的行相关的其他列的所有信息。 下面是一个简单的示例,旨在使其可复制: 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.
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
数据%
总结(最小值=最小值(c))
D
b最小值
1 a 1.2
2 b 1.7
3 c 3.1
4 d 2.2
因此,我还需要与a列和d列相关的信息,但是,由于c列中的值存在重复,因此我无法基于min_值列合并它们。。。我想知道当我们使用dplyr包时,是否有任何方法可以保存其他专栏的信息
我在这里和这里找到了一些解释,但没有一个能解决我的问题。您可以使用
group\u by
而不使用summary
:
data %>%
group_by(b) %>%
mutate(min_values = min(c)) %>%
ungroup()
这里有两个选项,分别使用dplyr中的a)
过滤器和b)切片。在这种情况下,任何组的c
列中都没有重复的最小值,因此a)和b)的结果相同。如果存在重复的最小值,方法a)将在每组中返回每个最小值,而b)在每组中只返回一个最小值(第一个)
a)
或者类似地
> 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)
使用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
您究竟建议生成的data.frame的外观如何?其他数据压缩成一行时会是什么样子?非常感谢Bergant,问题是你的方法给了我所有的行。。。但对我来说,重要的是要知道,例如,最小值与列“a”中的数字4有关。Docendo下面的答案正是我所需要的。无论如何,谢谢你花时间回答这个问题:-)这个答案。本周我的“duh”时刻。如此简单,却又如此强大。感谢一百万Docendo的回答。这正是我想要的:-)正是我需要的!我发现函数片是一种奖励,thx!如果您试图使用Summary获取原始数据中不包含的信息,因此无法“过滤”,该怎么办?例如,总和还是平均数?
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