[英]Assign new values for the column in r
我有一列值:“腺癌”、“大細胞癌”、“其他肺癌”、“小細胞癌”、“鱗狀細胞癌”,例如:
> head(covars$newtype[1:5])
[1] Large-cell carcinoma Other lung cancer
[3] <NA> Adenocarcinoma
[5] Adenocarcinoma
我想分別將值更改為“Ade”、“Large”、“Other”、“Small”、“Squ”。我嘗試了幾種方法,目前計划通過編寫多個 ifelse 來修復它。但是有沒有更有效的方法修復它?提前致謝!
我們可以嘗試使用case_when
從dplyr
包:
covar$abbrev <- case_when(
covars$newtype == "Large-cell carcinoma" ~ "Large",
covars$newtype == "Other lung cancer" ~ "Other",
covars$newtype == "Adenocarcinoma" ~ "Ade",
TRUE ~ NA
)
您可以在上述內容中添加附加條款以涵蓋未顯示的其他數據。
解決此類問題的另一種方法是使用命名向量作為查找表:
labels <- c("Adenocarcinoma" = "Ade",
"Large-cell carcinoma" = "Large",
"Other lung cancer" = "Other",
"Small-cell carcinoma" = "Small",
"Squamous-cell carcinoma" = "Squ")
set.seed(42)
covars <- data.frame(newtype = c(sample(names(labels), 20, rep = TRUE), NA))
# Option 1
covars$newtype1 <- labels[covars$newtype]
# Option 2: Using dplyr::recode which allows for labelling missing values
covars$newtype2 <- dplyr::recode(covars$newtype, !!!labels, .missing = "Other")
covars
#> newtype newtype1 newtype2
#> 1 Adenocarcinoma Ade Ade
#> 2 Squamous-cell carcinoma Squ Squ
#> 3 Adenocarcinoma Ade Ade
#> 4 Adenocarcinoma Ade Ade
#> 5 Large-cell carcinoma Large Large
#> 6 Small-cell carcinoma Small Small
#> 7 Large-cell carcinoma Large Large
#> 8 Large-cell carcinoma Large Large
#> 9 Adenocarcinoma Ade Ade
#> 10 Small-cell carcinoma Small Small
#> 11 Adenocarcinoma Ade Ade
#> 12 Squamous-cell carcinoma Squ Squ
#> 13 Small-cell carcinoma Small Small
#> 14 Large-cell carcinoma Large Large
#> 15 Large-cell carcinoma Large Large
#> 16 Other lung cancer Other Other
#> 17 Adenocarcinoma Ade Ade
#> 18 Adenocarcinoma Ade Ade
#> 19 Other lung cancer Other Other
#> 20 Small-cell carcinoma Small Small
#> 21 <NA> <NA> Other
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.