使用dplyr计算R中的条件平均值(如SQL中的group by)
我有一个数据框,里面有城市列表和每日温度记录使用dplyr计算R中的条件平均值(如SQL中的group by),r,dplyr,R,Dplyr,我有一个数据框,里面有城市列表和每日温度记录 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) 我曾尝试使用包dplyr来实现这一点,但没有成功。要做到这一点,最好的方法是什么,注意完整的数据集包
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)
我曾尝试使用包
dplyr
来实现这一点,但没有成功。要做到这一点,最好的方法是什么,注意完整的数据集包含50000行,因此我希望代码是高效的。我认为您要寻找的(如果您想使用dplyr)是函数groupby
和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))
另一方面,我不认为50000行是dplyr的一个大数据集。我不会太担心,除非这段代码将在某种循环中,或者您有1M+行。正如Heroka在评论中所建议的,在大多数情况下,data.table在性能方面是一个更好的选择
编辑:删除了不必要的步骤什么是“但没有成功”的意思?请显示尝试、错误消息等。如果值实际上是数字,请尝试
ave(数据[,2],数据[,1])
@CathG已修复以匹配其所需的输出。如果数据较大且性能存在问题,则可以尝试使用data.Table如果要使用dplyr
,则可以将group_by
与mutate
结合使用,这很好,但是如何将平均值添加到数据帧中呢零件是创建附加平均值列的零件。我不确定我是否理解你的真正意思。原始数据帧不受影响,因为没有赋值。代码示例只是打印结果df%group\u by(city)%%>%mutate(mean(temp))
如果我想将此列附加到原始数据帧,我该如何做?df%group\u 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