![](/img/trans.png)
[英]For each row in a data frame, replace Non-NA values with the previous maximum number up to that point in 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.