使用日期时间来计算 [R] 中记录的平均值

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

我有一个看起来像这样的数据集。

# create data frame example
df1 <- data.frame("ckdate" = c("2016-04-28 22:30:00", "2016-05-14 12:00:00", "  
2016-05-15 02:00:00", "2016-05-16 00:00:00", "2016-05-17 03:30:00"),
                  "lab_value" = c(12, 35, 9, 55, 90),
                  "pid" = c(1, 1, 2, 2, 2)
                  )

此处的目标是将日期时间标准化为 12 小时块,然后计算这些块内患者的平均“lab_value”。最终,我可以绘制一个图来显示每个 12 小时时间点的平均实验室值。这是我到目前为止编码的内容

normalize_dates <- function(df){
  df <- df %>% 
    mutate(ckdate = as.POSIXct(ckdate, format = "%Y-%m-%d %H:%M:%S")) %>% 
    mutate(hours_since_first = as.numeric(difftime(ckdate, min(ckdate), units = "hours"))) %>% 
    mutate(hours_since_first = hours_since_first %/% 12)
  return(df)
}
df2 <- normalize_dates(df1) # This returns NAs for all differences

有许多缺失(NA 值)。所以我想知道的第一件事是

difftime
是否可以处理 NA,如果可以,是否有
na.omit
选项?或者有不同的方法来计算这些差异吗?

然后计算我的平均值

# finally, for each 12 hour block, take the average lab_value accross pids
df1 %>% 
  group_by(hours_since_first) %>% 
  summarize(mean_lab_value = mean(lab_value))

但我还不能真正测试这个,因为我无法获得 12 小时的时间块。我在 R 方面工作很多,但在处理日期时间方面的经验很少,所以这里的任何帮助将不胜感激。

r tidyverse
1个回答
0
投票

您的

df1$ckdate
文件中有一个空格,它会破坏您的所有值。

您的输入创建,请注意

\n

                   ckdate lab_value pid
1     2016-04-28 22:30:00        12   1
2     2016-05-14 12:00:00        35   1
3   \n2016-05-15 02:00:00         9   2
4     2016-05-16 00:00:00        55   2
5     2016-05-17 03:30:00        90   2

像这样清理你的数据:

df1 <- data.frame(ckdate = c("2016-04-28 22:30:00", "2016-05-14 12:00:00", "2016-05-15 02:00:00", "2016-05-16 00:00:00", "2016-05-17 03:30:00"),
                  lab_value = c(12, 35, 9, 55, 90),
                  pid = c(1, 1, 2, 2, 2)
)

该功能将起作用

norm_dates <- function(df){
df %>% 
  mutate(ckdate = as.POSIXct(ckdate, format = "%Y-%m-%d %H:%M:%S"),
         dif = as.numeric(difftime(ckdate, min(ckdate), units = 'hours')) %/% 12)
}
norm_dates(df1)
© www.soinside.com 2019 - 2024. All rights reserved.