Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dplyr计算R中的条件平均值(如SQL中的group by)_R_Dplyr - Fatal编程技术网

使用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