我有一个df,如下所示.我想找到date年之前发生的最近的日期(from R_1:R_10).这是一种一次计算R1:R10date天的差值,然后 Select 我们想要的值,然后将其放入新变量cdate的方法吗?

enter image description here

输出如下所示:

enter image description here

cdate将由R\u 1:R10日期标识,以负值最大的日期为输入cdate的日期

示例数据:

df<-structure(list(id = c("A0003", "A0003", "A0003", "A0003", "A0003", 
"A0003", "A0005", "A0005"), date = structure(c(17774, 17799, 
17805, 17837, 17846, 17873, 17784, 17784), class = "Date"), R_1 = structure(c(17773, 
17773, 17773, 17773, 17773, 17773, 17785, 17785), class = "Date"), 
    R_2 = structure(c(17815, 17815, 17815, 17815, 17815, 17815, 
    17827, 17827), class = "Date"), R_5 = structure(c(17794, 
    17794, 17794, 17794, 17794, 17794, 17806, 17806), class = "Date"), 
    R_10 = structure(c(17871, 17871, 17871, 17871, 17871, 17871, 
    NA, NA), class = "Date")), row.names = c(NA, 8L), class = "data.frame")

推荐答案

对于base R,我们将大于"date"的值循环到lapplyreplaceNA的"R\u"列上,然后使用pmax返回max日期值

df$cdate <-  do.call(pmax, c(lapply(df[grep("R_", names(df))], 
     \(x) replace(x, x > df$date, NA)), na.rm = TRUE))

-输出

> df
     id       date        R_1        R_2        R_5       R_10      cdate
1 A0003 2018-08-31 2018-08-30 2018-10-11 2018-09-20 2018-12-06 2018-08-30
2 A0003 2018-09-25 2018-08-30 2018-10-11 2018-09-20 2018-12-06 2018-09-20
3 A0003 2018-10-01 2018-08-30 2018-10-11 2018-09-20 2018-12-06 2018-09-20
4 A0003 2018-11-02 2018-08-30 2018-10-11 2018-09-20 2018-12-06 2018-10-11
5 A0003 2018-11-11 2018-08-30 2018-10-11 2018-09-20 2018-12-06 2018-10-11
6 A0003 2018-12-08 2018-08-30 2018-10-11 2018-09-20 2018-12-06 2018-12-06
7 A0005 2018-09-10 2018-09-11 2018-10-23 2018-10-02       <NA>       <NA>
8 A0005 2018-09-10 2018-09-11 2018-10-23 2018-10-02       <NA>       <NA>

R相关问答推荐

r替换lme S4对象的字符串的一部分

par函数中的缩写,比如mgp,mar,mai是如何被破译的?

如果可能,将数字列转换为整数,否则保留为数字

在不丢失空值的情况下取消列出嵌套列表

如何在PackageStatus()中列出&q;不可用的包&q;?

从多层嵌套列表构建Tibble?

创建列并对大型数据集中的特定条件进行成对比较的更高效程序

为什么我对圆周率图的蒙特卡罗估计是空的?

Rmarkdown::Render vs Source()

防止正则表达式覆盖以前的语句

如何在GALT包的函数&geom_x样条线中调整线宽

名字的模糊匹配

R-使用stri_trans_General()将其音译为德语字母

R将函数参数传递给ggploy

roxygen2正在处理太多的文件

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

R中从因数到数字的转换

当R使用c()组合两个向量时会发生什么?

有没有一种方法可以用非标准参数编写一个定制的ggploy主题函数?

有没有一种方法可以在pivot_longer()中 Select 最后一列,而不需要命名或给出索引号?