使用dplyr计算R中的条件均值(如SQL中的group by)

时间:2015-12-08 11:19:13

标签: r dplyr

我有一个包含城市列表和每日温度记录的数据框

ArrayList<QBChatMessage> messages = QBChatService.getDialogMessages(dialog, customObjectRequestBuilder, new Bundle());

我想添加第三列,即按城市划分的平均温度

data = data.frame(c("Chicago", "Chicago", "New York", "New York", "Denver"),
                  c(25, 36, 23, 24, 42))

我尝试使用包avgtemp = c(30.5, 30.5, 23.5, 23.5, 42) 执行此操作,但未成功。实现这一目标的最佳方法是什么,注意完整数据集包含50,000行,因此我希望代码有效。

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找的(如果您想使用dplyr)是函数group_bymutate的组合。

library(dplyr)
city <- c("a", "a", "b", "b", "c")
temp <- 1:5
df <- data.frame(city, temp)

df %>% group_by(city) %>% mutate(mean(temp))

哪个会输出:

    city  temp mean(temp)
  (fctr) (int)      (dbl)
1      a     1        1.5
2      a     2        1.5
3      b     3        3.5
4      b     4        3.5
5      c     5        5.0

另一方面,我认为50,000行不是dplyr的大数据集。我不会太担心,除非这个代码将在某种循环内或你有1M +行。正如Heroka在评论中所说的那样,在大多数情况下,data.table是一个更好的选择。

编辑:删除了不必要的步骤