r-多数据帧处理



我有几个数据帧,它们的名称如下plant1_wd_hly、plant2_wd_rly、plant3-wd_hly。。。。。。,他们每个人都有这样的数据:

           time temp
   1 2012-01-01 00:00:00   20
   2 2012-01-01 01:00:00   21
   3 2012-01-01 02:00:00   22
   4 2012-01-01 03:00:00   23
   5 2012-01-01 04:00:00   24

我需要将所有这些数据汇总到每日水平,并计算每日最大值、最小值。以下是生成这样的df:的代码

      x=seq(
          from=as.POSIXct("2012-1-1 0:00", tz="UTC"),
          to=as.POSIXct("2012-1-3 23:00", tz="UTC"),
           by="hour")
      plant1_wd_hrly=data.frame("time"=x,"temp"=seq(20,length.out=length(x)))
      plant1_wd_hrly$time=as.POSIXct(substr(plant1_wd_hrly$time,1,10))
      plant2_wd_hrly=data.frame("time"=x,"temp"=seq(25,length.out=length(x)))
      plant2_wd_hrly$time=as.POSIXct(substr(plant1_wd_hrly$time,1,10))
      plant1_wd_hrly$temp[2:3]=NA
      plant2_wd_hrly$temp[5:6]=NA

如果只有一个df,我通常使用dplyr包进行聚合:

      plant1_hrly=plant1_wd_hrly %>% group_by(time) %>% summarise(
                            temp_avg = mean(temp,na.rm=TRUE),
                            temp_max = max(temp,na.rm=TRUE),
                            temp_min = min(temp,na.rm=TRUE))

但是,对于多个df,有什么更有效的方法可以做到这一点呢?我想做的第一件事是做一个for循环,我可以从R加载一个动态生成的变量名吗?这样我就可以循环通过不同的df,因为它们都有非常相似的名称?如果我想给动态生成的变量名赋值,我可以使用assign,但如何加载呢?

谢谢。

制作一个类似df名称的向量,例如:

df_names <- grep("plant", ls(), value = T)

如果没有其他变量名称包含"plant"。否则,您需要使用regex。或者手工采摘。

然后在正文中使用get()和assign()循环遍历名称。您将第一个变量的名称作为字符串,它从变量中获取值。第二个采用一个名称和一个值,并将该值分配给该名称。

for(df_n in df_names){
temp_data = get(df_n) %>% group_by(time) %>% summarise(
                            temp_avg = mean(temp,na.rm=TRUE),
                            temp_max = max(temp,na.rm=TRUE),
                            temp_min = min(temp,na.rm=TRUE))
assign(paste0(df_n, "_agr"), temp_data)
}