从列表 (R) 创建平均温度的 for 循环?

问题描述 投票:0回答:1

我有一个文件列表(“x”),每十分钟就有一次温度。每个 ID 都是列表中的一个单独条目,并具有一组关联的温度。这是一个示例:

head(x)


$165.212

ID       Date     Time            DateTime       Temp
165.212 2023-07-18 10:31:00 2023-07-18 10:31:00 20.37
164.212 2023-07-18 10:41:00 2023-07-18 11:35:00 23.4
164.212 2023-07-18 10:51:00 2023-07-18 11:35:00 23.8
Lux      Fx Sex Sp   TimeOfDay                Hour
3060 164.212   M WT 10.58416667 2024-07-18 11:00:00
1287 164.212   M WT 10.75083333 2024-07-18 11:00:00
1128 164.212   M WT 10.91750000 2024-07-18 11:00:00


$164.314

ID       Date     Time            DateTime       Temp
164.314 2023-07-18 10:31:00 2023-07-18 11:35:00 32.5
164.314 2023-07-18 10:41:00 2023-07-18 11:35:00 33.2
164.314 2023-07-18 10:51:00 2023-07-18 11:35:00 22.8
Lux      Fx Sex Sp   TimeOfDay                Hour
3060 164.314   M WT 10.58416667 2024-07-18 11:00:00
1287 164.314   M WT 10.75083333 2024-07-18 11:00:00
2700 164.314   M WT 10.91750000 2024-07-18 11:00:00

我想创建一个 for 循环,获取列表中的每个条目并计算该 ID 号的每小时和每日平均温度,最好是一个包含 ID、平均每小时温度和日期/时间的新列表。

我创建了一个列(“小时”),将小时四舍五入到最接近的小时,我想根据这些值将数据聚合到组中。

这是我正在使用的代码,但我不明白为什么它不起作用。我知道我需要指定我正在制作一个新列表。

for (each in x) {
  hour_t$ = x %>%
    group_by(Hour) %>%
    summarise(AvgTemperature = mean(Temp, na.rm = TRUE))
}

示例数据(最佳猜测):

list(`165.212` = structure(list(ID = c("165.212", "164.212", 
"164.212"), Date = structure(c(19556, 19556, 19556), class = "Date"), 
    Time = c("10:31:00", "10:41:00", "10:51:00"), DateTime = structure(c(1689676260, 
    1689680100, 1689680100), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    Temp = c(20.37, 23.4, 23.8), Lux = c(3060L, 1287L, 1128L), 
    Fx = c(164.212, 164.212, 164.212), Sex = c("M", "M", "M"), 
    Sp = c("WT", "WT", "WT"), TimeOfDay = c("10.58416667 2024-07-18", 
    "10.75083333 2024-07-18", "10.91750000 2024-07-18"), Hour = c("11:00:00", 
    "11:00:00", "11:00:00")), row.names = c(NA, -3L), class = "data.frame"), 
    `164.314` = structure(list(ID = c("164.314", "164.314", "164.314"
    ), Date = structure(c(19556, 19556, 19556), class = "Date"), 
        Time = c("10:31:00", "10:41:00", "10:51:00"), DateTime = structure(c(1689680100, 
        1689680100, 1689680100), class = c("POSIXct", "POSIXt"
        ), tzone = "UTC"), Temp = c(32.5, 33.2, 22.8), Lux = c(3060L, 
        1287L, 2700L), Fx = c(164.314, 164.314, 164.314), Sex = c("M", 
        "M", "M"), Sp = c("WT", "WT", "WT"), TimeOfDay = c("10.58416667 2024-07-18", 
        "10.75083333 2024-07-18", "10.91750000 2024-07-18"), 
        Hour = c("11:00:00", "11:00:00", "11:00:00")), row.names = c(NA, 
    -3L), class = "data.frame"))
r dplyr
1个回答
0
投票

这会给你想要的结果吗@Liz M.?

library(tidyverse)

data_list <- list(`165.212` = structure(list(ID = c("165.212", "164.212", 
                                                    "164.212"), Date = structure(c(19556, 19556, 19556), class = "Date"), 
                                             Time = c("10:31:00", "10:41:00", "10:51:00"), DateTime = structure(c(1689676260, 
                                                                                                                  1689680100, 1689680100), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
                                             Temp = c(20.37, 23.4, 23.8), Lux = c(3060L, 1287L, 1128L), 
                                             Fx = c(164.212, 164.212, 164.212), Sex = c("M", "M", "M"), 
                                             Sp = c("WT", "WT", "WT"), TimeOfDay = c("10.58416667 2024-07-18", 
                                                                                     "10.75083333 2024-07-18", "10.91750000 2024-07-18"), Hour = c("11:00:00", 
                                                                                                                                                   "11:00:00", "11:00:00")), row.names = c(NA, -3L), class = "data.frame"), 
                  `164.314` = structure(list(ID = c("164.314", "164.314", "164.314"
                  ), Date = structure(c(19556, 19556, 19556), class = "Date"), 
                  Time = c("10:31:00", "10:41:00", "10:51:00"), DateTime = structure(c(1689680100, 
                                                                                       1689680100, 1689680100), class = c("POSIXct", "POSIXt"
                                                                                       ), tzone = "UTC"), Temp = c(32.5, 33.2, 22.8), Lux = c(3060L, 
                                                                                                                                              1287L, 2700L), Fx = c(164.314, 164.314, 164.314), Sex = c("M", 
                                                                                                                                                                                                        "M", "M"), Sp = c("WT", "WT", "WT"), TimeOfDay = c("10.58416667 2024-07-18", 
                                                                                                                                                                                                                                                           "10.75083333 2024-07-18", "10.91750000 2024-07-18"), 
                  Hour = c("11:00:00", "11:00:00", "11:00:00")), row.names = c(NA, 
                                                                               -3L), class = "data.frame"))

new_data_list <- map(data_list, .f = ~.x %>% group_by(ID, Hour) %>%
  summarise(AvgTemperature = mean(Temp, na.rm = TRUE)))
#> `summarise()` has grouped output by 'ID'. You can override using the `.groups`
#> argument.
#> `summarise()` has grouped output by 'ID'. You can override using the `.groups`
#> argument.

new_data_list
#> $`165.212`
#> # A tibble: 2 × 3
#> # Groups:   ID [2]
#>   ID      Hour     AvgTemperature
#>   <chr>   <chr>             <dbl>
#> 1 164.212 11:00:00           23.6
#> 2 165.212 11:00:00           20.4
#> 
#> $`164.314`
#> # A tibble: 1 × 3
#> # Groups:   ID [1]
#>   ID      Hour     AvgTemperature
#>   <chr>   <chr>             <dbl>
#> 1 164.314 11:00:00           29.5

创建于 2024-07-03,使用 reprex v2.1.0

如果没有,请在下面评论,我们可以相应调整。

© www.soinside.com 2019 - 2024. All rights reserved.