我在下面有一個資料框,我想按每一行選擇第一個非缺失日期并將其作為新列添加到資料框中。
uj5u.com熱心網友回復:
您可以使用 {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 包于 2022-04-20 創建(v2.0.1)
uj5u.com熱心網友回復:
一個base R選項:
df$dt5 <- apply(df[,-1], 1, function(z) na.omit(z)[1])
df
輸出:
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"))
uj5u.com熱心網友回復:
我們可以通過旋轉來做到這一點:來自 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460017.html
