我有一个包含城市列表和每日温度记录的数据框
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行,因此我希望代码有效。
答案 0 :(得分:3)
我认为您正在寻找的(如果您想使用dplyr)是函数group_by
和mutate
的组合。
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是一个更好的选择。
编辑:删除了不必要的步骤