Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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
在R中跨数据帧聚合数据_R - Fatal编程技术网

在R中跨数据帧聚合数据

在R中跨数据帧聚合数据,r,R,我有两个数据帧。df1是一个数据帧,它在一组单元中包含多个位置。df2包括所有位置的每日最高温度观测值(df$tmax)。对于df1内的每个单元,我想计算每个单元内所有位置的平均每日最高温度 下面的代码生成每个数据帧的示例。我需要将其扩展到大约240个单元和8年的每日数据 在R中的这种查找/匹配练习似乎总是让我着迷。必须有一个明显的方法来做到这一点,但我现在遇到了阻碍,没有一些真正的蛮力加入等 df1我们可以使用left\u-join,group\u-byunitID和locationID并取t

我有两个数据帧。df1是一个数据帧,它在一组单元中包含多个位置。df2包括所有位置的每日最高温度观测值(df$tmax)。对于df1内的每个单元,我想计算每个单元内所有位置的平均每日最高温度

下面的代码生成每个数据帧的示例。我需要将其扩展到大约240个单元和8年的每日数据

在R中的这种查找/匹配练习似乎总是让我着迷。必须有一个明显的方法来做到这一点,但我现在遇到了阻碍,没有一些真正的蛮力加入等


df1我们可以使用
left\u-join
group\u-by
unitID
locationID
并取
tmax的
mean

library(dplyr)

df1  %>%
  left_join(df2, by = c("locationID" = "id")) %>%
  group_by(unitID, locationID) %>%
  summarise(tmx = mean(tmax, na.rm = TRUE))


#   unitID locationID    tmx
#   <chr>  <chr>       <dbl>
# 1 98008  USC00454169  30.5
# 2 98008  USW00024234  30.5
# 3 98008  USW00094248  28  
# 4 98008  USW00094290  28  
# 5 98065  USC00451233  -5.5
# 6 98065  USC00458508 -19.5
# 7 98065  USR0000WFTA  -3  
# 8 98065  USS0021B60S -33.5
# 9 98146  USC00454169  30.5
#10 98146  USW00024233  19.5
#11 98146  USW00024234  30.5
#12 98146  USW00094248  28  
#13 98584  USC00451939  44.5
#14 98584  USC00455086  33.5
#15 98584  USW00094227  38.5

我们可以使用
data.table
join

library(data.table)
setDT(df1)[setDT(df2), on = .(locationID = id)][,
    .(tmx = mean(tmax, na.rm = TRUE)), .(unitID, locationID)]
#.   unitID  locationID   tmx
# 1:  98008 USW00094290  28.0
# 2:  98008 USW00094248  28.0
# 3:  98146 USW00094248  28.0
# 4:  98008 USW00024234  30.5
# 5:  98146 USW00024234  30.5
# 6:  98008 USC00454169  30.5
# 7:  98146 USC00454169  30.5
# 8:  98065 USC00458508 -19.5
# 9:  98065 USS0021B60S -33.5
#10:  98065 USR0000WFTA  -3.0
#11:  98065 USC00451233  -5.5
#12:  98146 USW00024233  19.5
#13:  98584 USW00094227  38.5
#14:  98584 USC00451939  44.5
#15:  98584 USC00455086  33.5

多亏了下面的两个答案,我很快就能用下面的方法实现这一点,这样我就可以得到每日平均温度<代码>r df1%>%左加入(df2,by=c(“位置id”=“id”))%>%group\U by(单位id,日期)%>%汇总(tmx=平均值(tmax,na.rm=TRUE))
aggregate(tmax~unitID + locationID, 
          merge(df1, df2, by.x = "locationID", by.y = "id", all.x = TRUE), 
          mean, na.rm = TRUE)
library(data.table)
setDT(df1)[setDT(df2), on = .(locationID = id)][,
    .(tmx = mean(tmax, na.rm = TRUE)), .(unitID, locationID)]
#.   unitID  locationID   tmx
# 1:  98008 USW00094290  28.0
# 2:  98008 USW00094248  28.0
# 3:  98146 USW00094248  28.0
# 4:  98008 USW00024234  30.5
# 5:  98146 USW00024234  30.5
# 6:  98008 USC00454169  30.5
# 7:  98146 USC00454169  30.5
# 8:  98065 USC00458508 -19.5
# 9:  98065 USS0021B60S -33.5
#10:  98065 USR0000WFTA  -3.0
#11:  98065 USC00451233  -5.5
#12:  98146 USW00024233  19.5
#13:  98584 USW00094227  38.5
#14:  98584 USC00451939  44.5
#15:  98584 USC00455086  33.5