我的測驗資料:
tableid id name weight weightdate
1 1 david 100 01/01/2020
2 1 david 100 01/01/2020
3 1 david NA NA
4 2 anne NA NA
5 3 peter 150 02/10/2020
6 3 peter 150 02/10/2020
我有一些關于同一個人(在本例中為 david)的記錄,其中包含有效(100 和 01/01/2020)和 NA 的體重和體重資料。我希望通過用那個人的有效資料替換它們來規范 NA。對于沒有任何有效資料的 anne,我會保持原樣。我正在考慮使用fill.
我想要的輸出:
tableid id name weight weightdate
1 1 david 100 01/01/2020
2 1 david 100 01/01/2020
3 1 david 100 01/01/2020
4 2 anne NA NA
5 3 peter 150 02/10/2020
6 3 peter 150 02/10/2020
uj5u.com熱心網友回復:
您可以使用包中的fill()函式tidyr:
library(tidyr)
df1 %>% group_by(name) %>% fill(weight, weightdate) %>% ungroup
# A tibble: 6 x 5
tableid id name weight weightdate
<int> <int> <chr> <int> <chr>
1 1 1 david 100 01/01/2020
2 2 1 david 100 01/01/2020
3 3 1 david 100 01/01/2020
4 4 2 anne NA NA
5 5 3 peter 150 02/10/2020
6 6 3 peter 150 02/10/2020
資料
df1 <- structure(list(tableid = 1:6, id = c(1L, 1L, 1L, 2L, 3L, 3L),
name = c("david", "david", "david", "anne", "peter", "peter"
), weight = c(100L, 100L, NA, NA, 150L, 150L), weightdate = c("01/01/2020",
"01/01/2020", NA, NA, "02/10/2020", "02/10/2020")), class = "data.frame", row.names = c(NA,
-6L))
uj5u.com熱心網友回復:
這是一個替代方案。Andre Wildberg 已經提供了我最喜歡的:
library(dplyr)
df %>%
group_by(name) %>%
mutate(across(everything(), ~ifelse(is.na(.), lag(.),.)))
tableid id name weight weightdate
<int> <int> <chr> <int> <chr>
1 1 1 david 100 01/01/2020
2 2 1 david 100 01/01/2020
3 3 1 david 100 01/01/2020
4 4 2 anne NA NA
5 5 3 peter 150 02/10/2020
6 6 3 peter 150 02/10/2020
資料:
structure(list(tableid = 1:6, id = c(1L, 1L, 1L, 2L, 3L, 3L),
name = c("david", "david", "david", "anne", "peter", "peter"
), weight = c(100L, 100L, NA, NA, 150L, 150L), weightdate = c("01/01/2020",
"01/01/2020", NA, NA, "02/10/2020", "02/10/2020")), class = "data.frame", row.names = c(NA,
-6L))
uj5u.com熱心網友回復:
一個data.table選項
> setDT(df)[, lapply(.SD, function(x) unique(na.omit(x))), name]
name tableid id weight weightdate
1: david 1 1 100 01/01/2020
2: david 2 1 100 01/01/2020
3: david 3 1 100 01/01/2020
4: anne 4 2 NA <NA>
5: peter 5 3 150 02/10/2020
6: peter 6 3 150 02/10/2020
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/397789.html
標籤:r
