[英]How to combine multiple columns with missing data into one?
我有一個(非常混亂的)數據集,它是幾個數據集合並的產物。 它目前看起來像這樣:
Study_ID Status Death_status death
1 100 1 NA NA
2 200 1 NA NA
3 300 0 NA NA
4 400 NA 0 NA
5 500 NA 1 NA
6 600 NA 0 NA
7 700 NA NA 0
8 800 NA NA 1
9 900 NA NA 1
10 1000 NA NA 0
我想創建一個新列,將每個患者的所有 3 個列組合在一起。
我想要的輸出看起來像這樣:
Study_ID New_Death_Status Status Death_status death
1 100 1 1 NA NA
2 200 1 1 NA NA
3 300 0 0 NA NA
4 400 0 NA 0 NA
5 500 1 NA 1 NA
6 600 0 NA 0 NA
7 700 0 NA NA 0
8 800 1 NA NA 1
9 900 1 NA NA 1
10 1000 0 NA NA 0
其中 New_Death_Status 為每位患者提供全套數據。
我該怎么做呢?
可重現的數據:
data<-data.frame(Study_ID=c("100","200","300","400","500","600","700","800","900","1000"),Status=c("1","1","0","NA","NA","NA","NA","NA","NA","NA"),Death_status=c("NA","NA","NA","0","1","0","NA","NA","NA","NA"),death=c("NA","NA","NA","NA","NA","NA","0","1","1","0"))
> data
假設我們知道know patient 將有不止一列(這意味着我們可以安全地忽略第一列之后的所有非NA
數據),那么我們可以coalesce
它。
但是...您的數據具有文字"NA"
字符串而不是保留符號NA
。 我認為這可能是您在某處處理的錯誤,所以我會將它們“修復”為NA
(仍然是字符串):
library(dplyr)
data %>%
mutate(
# this step just replaces the literal "NA" with the symbol NA
across(c(Status, Death_status, death), ~ if_else(. == "NA", .[NA], .)),
New_Death_Status = coalesce(Status, Death_status, death)
)
# Study_ID Status Death_status death New_Death_Status
# 1 100 1 <NA> <NA> 1
# 2 200 1 <NA> <NA> 1
# 3 300 0 <NA> <NA> 0
# 4 400 <NA> 0 <NA> 0
# 5 500 <NA> 1 <NA> 1
# 6 600 <NA> 0 <NA> 0
# 7 700 <NA> <NA> 0 0
# 8 800 <NA> <NA> 1 1
# 9 900 <NA> <NA> 1 1
# 10 1000 <NA> <NA> 0 0
coalesce
返回在其向量參數中找到的第一個非NA
,因此它將默默地丟棄任何后續存在的非NA
值。 此外,如果所有類都不相同,它會抱怨; 它們在這里都是字符串,但是如果您的處理正在更改類
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.