R 和 dplyr : using value of specific group constituent as output of summarise

标签 r group-by dplyr summary

我的数据看起来像这样:

df = data.frame("itm" = c(1,2,1,2,1,2), 
"month" = c(1,1,2,2,3,3), 
"value" = c(0.6, 0.5, 0.4, 0.3,0.2,0.1))

>df
    itm month value
1   1     1   0.6
2   2     1   0.5
3   1     2   0.4
4   2     2   0.3
5   1     3   0.2
6   2     3   0.1

我使用 dplyr 按月对数据进行分组,然后汇总以找到按月的平均值。

> dfg = group_by(df, month)
> dfs = summarize(dfg, avg=mean(value))
> dfs
Source: local data frame [3 x 2]

  month  avg
1     1 0.55
2     2 0.35
3     3 0.15

到目前为止,一切都按预期进行。但我还想在 dfs 中有一列,其中包含给定月份第 2 项的“值”。

我认为这样的事情可能会起作用:

> dfs$itm2 = filter(dfg, itm==2)

但我得到:

> dfs
Source: local data frame [3 x 3]

  month  avg     itm2
1     1 0.55 <dbl[3]>
2     2 0.35 <dbl[3]>
3     3 0.15 <dbl[3]>

显然,我不知道自己在做什么。我怀疑使用“dfs$itm2 =”是一个问题。

顺便说一句,如果我可以使用原始的汇总命令创建“itm2”列,我会非常高兴。原则上,我知道我可以定义一个函数来从每个组中选择“itm==2”条目,并将该函数包含在汇总调用中......实际上我没有运气。

如果这是一个多余的问题,我深表歉意 - 我已经努力寻找类似的问题,但没有成功。感谢您的帮助!

最佳答案

你可以试试

dfg %>% 
    summarise(ave= mean(value), itm2= value[itm==2])
#   month  ave itm2
#1     1 0.55  0.5
#2     2 0.35  0.3
#3     3 0.15  0.1

filter 的输出是一个包含 3 列的 data.frame

 filter(dfg, itm==2)
 # itm month value
 #1   2     1   0.5
 #2   2     2   0.3
 #3   2     3   0.1

因此,帖子中的代码基本上是将 data.frame/tbl_df 分配给 data.frame 中的列。

我想,您需要选择value列,然后将其分配给dfs$itm2

 dfs$itm2 <- filter(dfg, itm==2) %>%
                                .$value

关于R 和 dplyr : using value of specific group constituent as output of summarise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731788/

相关文章:

emacs - 向 ESS/R 用户询问有关 .emacs 文件中 elisp 代码的建议

r - 将列表的元素分割为单独的列

R ggplot 在图例项之间添加空格

sql - 在sql server cte中获取 "No column was specified for column 2 of ' d'"?

R:使用共享名称模式的多列将数据 reshape 为更长的格式

R - 将二维向量转换为一维命名向量

mysql - 加入 MySQL 之前聚合表(GROUP BY)

python - Pandas :按组计算唯一的日期时间值会给出奇怪的值

r - 如何在 R 中的函数内部使用 dplyr/magrittr 的管道?

r - Str_detect 多列使用跨