繁体   English   中英

如何获取每行的第一个非 NA 日期并将其作为新列添加到 r 下面的数据框中?

[英]How to get the first non-NA date for each row and add it as a new column in the data frame below in r?

我在下面有一个数据框,我想按每行选择第一个非缺失日期并将其作为新列添加到数据框中。在此处输入图像描述

你可以使用 {dplyr}

data <- data.frame(x = c(NA, 1), y = 2:3)
library(dplyr, warn.conflicts = FALSE)
data %>% mutate(z = coalesce(!!!.))
#>    x y z
#> 1 NA 2 2
#> 2  1 3 1

reprex package (v2.0.1) 创建于 2022-04-20

base R选项:

df$dt5 <- apply(df[,-1], 1, function(z) na.omit(z)[1])
df

Output:

  id        dt1        dt2        dt3        dt4        dt5
1  1       <NA> 2002-01-11 2003-01-01 2004-01-11 2002-01-11
2  2 2001-01-01 2002-10-12 2003-10-12 2004-01-11 2001-01-01
3  3       <NA> 2001-10-12 2002-01-11 2004-11-19 2001-10-12
4  4       <NA>       <NA> 2002-10-12 2002-10-12 2002-10-12

您的数据:

df <- data.frame(id = c(1,2,3,4),
                 dt1 = c(NA, "2001-01-01", NA, NA),
                 dt2 = c("2002-01-11", "2002-10-12", "2001-10-12", NA),
                 dt3 = c("2003-01-01", "2003-10-12", "2002-01-11", "2002-10-12"),
                 dt4 = c("2004-01-11", "2004-01-11", "2004-11-19", "2002-10-12"))

我们可以通过旋转来做到这一点:来自 Quinten 的数据,非常感谢!

library(dplyr)
library(tidyr)

df %>% 
  pivot_longer(
    -id,
  ) %>% 
  group_by(id) %>% 
  mutate(first = first(na.omit(value))) %>% 
  pivot_wider(
    names_from = name
  )
     id first      dt1        dt2        dt3        dt4       
  <dbl> <chr>      <chr>      <chr>      <chr>      <chr>     
1     1 2002-01-11 NA         2002-01-11 2003-01-01 2004-01-11
2     2 2001-01-01 2001-01-01 2002-10-12 2003-10-12 2004-01-11
3     3 2001-10-12 NA         2001-10-12 2002-01-11 2004-11-19
4     4 2002-10-12 NA         NA         2002-10-12 2002-10-12

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM