我有一个数据框,其中包含几个日期列,我需要返回一个列名序列,其中包含每行从最早到最旧的日期.

即,如果起始数据是:

data.frame(ID = c(1,2,3,4,5,6),col1 = as.Date(c("2011-02-01","2020-09-01",NA,"2010-06-01",NA,"2015-02-02")),col2 = as.Date(c("2010-02-01","2018-09-01","2012-03-01",NA,NA,NA)), col3 = as.Date(c("1998-09-02",NA,"2013-06-01","2003-05-01","2000-02-01",NA)),col4=as.Date(c("2020-04-01",NA,"2019-09-10","2014-03-05",NA,"2000-08-12")))
  ID       col1       col2       col3       col4
1  1 2011-02-01 2010-02-01 1998-09-02 2020-04-01
2  2 2020-09-01 2018-09-01         NA         NA
3  3         NA 2012-03-01 2013-06-01 2019-09-10
4  4 2010-06-01         NA 2003-05-01 2014-03-05
5  5         NA         NA 2000-02-01         NA
6  6 2015-02-02         NA         NA 2000-08-12

那么最终的结果应该是:

data.frame(ID = c(1,2,3,4,5,6),col1 = as.Date(c("2011-02-01","2020-09-01",NA,"2010-06-01",NA,"2015-02-02")),col2 = as.Date(c("2010-02-01","2018-09-01","2012-03-01",NA,NA,NA)), col3 = as.Date(c("1998-09-02",NA,"2013-06-01","2003-05-01","2000-02-01",NA)),col4=as.Date(c("2020-04-01",NA,"2019-09-10","2014-03-05",NA,"2000-08-12")),seq = c("col3_col2_col1_col4","col2_col1","col2_col3_col4","col3_col1_col4","col3","col4_col1"))
ID       col1       col2       col3       col4                 seq
1  1 2011-02-01 2010-02-01 1998-09-02 2020-04-01 col3_col2_col1_col4
2  2 2020-09-01 2018-09-01         NA         NA           col2_col1
3  3         NA 2012-03-01 2013-06-01 2019-09-10      col2_col3_col4
4  4 2010-06-01         NA 2003-05-01 2014-03-05      col3_col1_col4
5  5         NA         NA 2000-02-01         NA                col3
6  6 2015-02-02         NA         NA 2000-08-12           col4_col1

推荐答案

以下是使用pivot_longerpivot_widertidyverse方法:

library(dplyr, warn = FALSE)
library(tidyr)

dat |>
  pivot_longer(
    -ID
  ) |>
  filter(!is.na(value)) |>
  mutate(
    seq = paste(name[order(value)], collapse = "_"),
    .by = ID
  ) |>
  pivot_wider(
    names_from = name, values_from = value
  )
#> # A tibble: 6 × 6
#>      ID seq                 col1       col2       col3       col4      
#>   <dbl> <chr>               <date>     <date>     <date>     <date>    
#> 1     1 col3_col2_col1_col4 2011-02-01 2010-02-01 1998-09-02 2020-04-01
#> 2     2 col2_col1           2020-09-01 2018-09-01 NA         NA        
#> 3     3 col2_col3_col4      NA         2012-03-01 2013-06-01 2019-09-10
#> 4     4 col3_col1_col4      2010-06-01 NA         2003-05-01 2014-03-05
#> 5     5 col3                NA         NA         2000-02-01 NA        
#> 6     6 col4_col1           2015-02-02 NA         NA         2000-08-12

R相关问答推荐

在R中使用自定义函数时如何删除该函数的一部分?

给定R中另一行中的值,如何插补缺失值

如何从其他前面列中减go 特定列的平均值?

在特定Quarto(reveal.js)幻灯片上隐藏徽标

用相同方法得到不同函数的ROC最优截断值

在ggplot2中更改小提琴情节的顺序

提取一个列表中单个列的重复观察结果R

有效识别长载体中的高/低命中

R如何将列名转换为更好的年和月格式

为什么在写入CSV文件时Purrr::Pwalk不起作用

如何计算每12行的平均数?

如何为混合模型输出绘制不同的线型?

如何判断代码是否在R Markdown(RMD)上下文中交互运行?

如何使用ggplot2根据绘图中生成的斜率对小平面进行排序?

排序R矩阵的行和列

通过比较来自多个数据框的值和R中的条件来添加新列

如何计算多个变量的百分比与总和的百分比?

在直方图中显示两个变量

汇总数据:在跨越()all_of()Dynamic_list_of_vars=>;所选内容不能有缺失值的汇总()中出错

通过不完全重叠的多个柱连接