mean
我期待一个data.frame,其中新列max
排除了 group values year mean
1 a 1 2001 2.666667
2 a 2 2002 2.666667
3 a 2 2003 2.666667
4 a 3 2002 2.666667
5 a 5 2003 2.666667
6 b 3 2003 3.000000
7 c 4 2002 NaN
(与关联组)中存在的年份。但这是输出:
b
为什么mean
(第5行)有意思?如何更改template<class...>
struct types{using type=types;};
const types<int, double, char> supported_types;
以正确反映该过滤器?我想它有这个警告:
警告讯息: 在年!=最大$年[匹配(完整$ group,最大$ group)]: 较长的物体长度不是较短物体长度的倍数
答案 0 :(得分:4)
对于它的价值,我认为这在data.table中是更清晰的。
library(data.table)
setDT(full); setDT(max)
mDT = full[!max, on=.(group, year)][
.(unique(full$group)), on=.(group), mean(values), by=.EACHI]
group V1
1: a 2.666667
2: b NA
3: c NA
然后,如果需要,您可以将此列添加到主表中,如full[mDT, on=.(group), v := i.V1]
。
类似的dplyr代码......
mDF = full %>%
anti_join(max) %>%
right_join(distinct(full, group)) %>%
group_by(group) %>%
summarise(v = mean(values))
Joining, by = c("group", "year")
Joining, by = "group"
# A tibble: 3 x 2
group v
<fctr> <dbl>
1 a 2.666667
2 b NA
3 c NA
这可以类似地使用left_join或其他东西连接回full
,但这似乎是来自"tidy data" perspective的不太好的想法,因为这些变量是在组级别定义的。