背景
我试图过滤的大数据框架,但不正确的分组使其变得困难。想象一下,您有一个具有分层类别的杂货店的销售信息。香蕉出现3次:2次"水果"并且一旦作为"肉"。我知道"肉"销售实际上发生了所以我不想摆脱它,但它弄乱了我过滤的汇总数据(比如我只想保持3个或更多实例的分组,香蕉会消失)。
可重复的示例
x1 <- c('a','a','a','b','b','b')
x2 <- c(1,1,4,5,2,2)
x3 <- c(10,11,12,13,14,15)
df = data.frame(x1,x2,x3)
summarized = df %>%
group_by(x1, x2) %>%
summarize(Avg = mean(x3),
Times = n())
创建:
x1 x2 Avg Times
1 a 1 10.5 2
2 a 4 12.0 1
3 b 2 14.5 2
4 b 5 13.0 1
分组(a,1)多于(a,4),因此我知道(a,1)是正确的(与(b,2)对(b,5)相同)。我正在寻找我的数据框架:
x1 x2 Avg Times
1 a 1 11 3
2 b 2 14 3
x2
对我来说很重要,因为我的条件格式是基于那个(例如,如果x2 == 1&amp; AVG&lt; 10然后放弃其他保留)。
我最好尝试分别进行均值/计数然后添加最大的x2?提前致谢!
答案 0 :(得分:0)
如果您知道每个x2
组中最常见的x1
是正确的,您可以这样做:
correct_cats = df %>%
group_by(x1) %>%
count(x2) %>%
# Find most common x2
top_n(1, n) %>%
select(-n)
df = df %>%
# Drop current x2
select(-x2) %>%
# Merge in corrected x2
left_join(correct_cats, by = 'x1')
summarized = df %>%
group_by(x1, x2) %>%
summarize(Avg = mean(x3),
Times = n())
答案 1 :(得分:0)
更新:
which.max
默认选择第一个最大值,因此如果我们需要选择具有最大值的最后一个条目,我们只需rev
e table
条目,然后选择最大值。
df %>%
group_by(x1) %>%
summarise(x2 = names(which.max(rev(table(x2)))),
x3 = mean(x3),
Times = n())
原始答案
我们可group_by
x1
并选择x2
最长时间,计算x3
的平均值并计算行数(n()
)对于每个小组。
library(dplyr)
df %>%
group_by(x1) %>%
summarise(x2 = names(which.max(table(x2))),
x3 = mean(x3),
Times = n())
# x1 x2 x3 Times
# <fctr> <chr> <dbl> <int>
#1 a 1 11 3
#2 b 2 14 3