gpt4 book ai didi

r - 根据对应于特定日期的有效值将日期转换为 NA

转载 作者:行者123 更新时间:2023-12-01 22:47:39 25 4
gpt4 key购买 nike

假设我有

> df
fu1_date fu1_n_symp fu5_date fu5_n_symp fu7_date fu7_n_symp
1 2012-03-05 1 2014-03-05 NA 2016-03-05 1
2 2013-08-09 1 2015-10-09 2 2017-11-09 NA
3 2019-05-05 1 2020-06-07 2 2021-07-09 2

df 表示一个非常大的数据框。在这个例子中,我记录了不同随访日期 fu_date 的症状数 n_symp

我的数据框中的每一行最多有 20 个跟进,fu1_fu2_、...、fu20_。我需要更正我的数据框,这样如果 n_sympNA 那么相应的 fuX_date 应该从 as.Date() 转换NA

您可以看到 第 1 行 在后续 5 (fu5_n_symp == NA) 中有缺失值,但 FU1 或 FU7 没有。因此,第 1 行中的 fu5_date 应从 2014-03-05 转换为 NA

我正在寻找仅在 dplyr 中的解决方案。

预期输出

> df
fu1_date fu1_n_symp fu5_date fu5_n_symp fu7_date fu7_n_symp
1 2012-03-05 1 <NA> NA 2016-03-05 1
2 2013-08-09 1 2015-10-09 2 <NA> NA
3 2019-05-05 1 2020-06-07 2 2021-07-09 2

数据

df <- structure(list(fu1_date = structure(c(15404, 15926, 18021), class = "Date"), 
fu1_n_symp = c(1L, 1L, 1L), fu5_date = structure(c(16134,
16717, 18420), class = "Date"), fu5_n_symp = c(NA, 2L, 2L
), fu7_date = structure(c(16865, 17479, 18817), class = "Date"),
fu7_n_symp = c(1L, NA, 2L)), class = "data.frame", row.names = c(NA, -3L))

最佳答案

使用pivot_longer(),你可以指定".value"names_to来堆叠daten_symp 成对。在这种情况下,必须提供 names_sepnames_pattern 之一来指定应如何拆分列名。然后,您可以轻松地用 NA 替换那些缺少 n_symp 的日期。最后,将长数据旋转得更宽以获得原始格式。

library(dplyr)
library(tidyr)

df %>%
mutate(id = 1:n()) %>%
pivot_longer(-id, names_to = c("fu", ".value"), names_sep = "(?<=\\d)_") %>%
mutate(date = replace(date, is.na(n_symp), NA)) %>%
pivot_wider(names_from = fu, values_from = c(date, n_symp),
names_glue = "{fu}_{.value}", names_vary = "slowest")

# # A tibble: 3 × 7
# id fu1_date fu1_n_symp fu5_date fu5_n_symp fu7_date fu7_n_symp
# <int> <date> <int> <date> <int> <date> <int>
# 1 1 2012-03-05 1 NA NA 2016-03-05 1
# 2 2 2013-08-09 1 2015-10-09 2 NA NA
# 3 3 2019-05-05 1 2020-06-07 2 2021-07-09 2
pivot_wider() 中的 names_vary 控制结果列名的组合顺序。

  • “最快”(默认)

    fu1_date   fu5_date   fu7_date   fu1_n_symp fu5_n_symp fu7_n_symp
  • “最慢”

    fu1_date   fu1_n_symp fu5_date   fu5_n_symp fu7_date   fu7_n_symp

关于r - 根据对应于特定日期的有效值将日期转换为 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74967827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com