我有一個包含許多 NA 的長資料框,但我想壓縮它,以便所有 NA 在按變數分組時都填充有第一個非缺失值 - 但如果觀察結果只有NA,它會保留它。在我更新 R 之前,我有一個有效的代碼(如下所示),但現在如果其中一列全是 NA,它會洗掉行。
這是一個示例資料集:
library(dplyr)
test <- tibble(name = c("J", "C", "J", "C"),
test_1 = c(1:2, NA, NA),
test_2 = c(NA, NA, 3:4),
make_up_test = c(NA, 1, NA, NA))
這就是過去的作業——但現在洗掉在一列中只有 NA 的觀察(請參閱 J 被洗掉,因為他只有 NA 用于測驗觀察)
test %>%
group_by(name) %>%
summarise_all(~first(na.omit(.)))
這是我希望得到的:
solution <- tibble(name = c("J", "C"),
test_1 = c(1:2),
test_2 = c(3:4),
make_up_test = c(NA, 1))
uj5u.com熱心網友回復:
我們洗掉NAwithna.omit并獲取first元素 -如果不存在非 NA 元素,則使用[1]強制NA
library(dplyr)
test %>%
group_by(name) %>%
summarise(across(everything(), ~ first(na.omit(.x))[1]))
-輸出
# A tibble: 2 × 4
name test_1 test_2 make_up_test
<chr> <int> <int> <dbl>
1 C 2 4 1
2 J 1 3 NA
uj5u.com熱心網友回復:
這是一種旋轉的方法:
library(tidyr)
library(dplyr)
test %>%
pivot_longer(-name, names_to = "names") %>%
drop_na() %>%
pivot_wider(names_from = names, values_from = value) %>%
relocate(test_2, .after = test_1)
name test_1 test_2 make_up_test
<chr> <dbl> <dbl> <dbl>
1 J 1 3 NA
2 C 2 4 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/446288.html
