经过另一个数据帧过滤后的条件平均值

时间:2017-09-08 18:43:18

标签: r dplyr

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)]:     较长的物体长度不是较短物体长度的倍数

1 个答案:

答案 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的不太好的想法,因为这些变量是在组级别定义的。

相关问题