我正在使用ifelse函式,以便在這個向量的所有 "值 "都是NA的情況下獲得一個帶NA的向量,或者獲得一個所有值不等于 "NA_NA "的向量。在我的例子中,我想得到這樣的結果
。 [/span>1] "14_mter" "78_ONHY"
但我得到的是這樣的結果
[1] "14_mter"/span>
我的例子:
vect=c("NA_NA"。 "14_mter", "78_ONHY")
out=ifelse(all(is. na(vec))。 vec, vec[which(vec! ="NA_NA")])
這個函式有什么問題?
uj5u.com熱心網友回復:
ifelse是矢量的,其結果與test引數一樣長。all(is.na(vect))總是只有長度1,因此結果也是如此。一個普通的if/else子句在這里就可以了。
vect < - c("NA_NA"_。 "14_mter", "78_ONHY")
if (all( is. na(vect)) {
out <- vect
} else { > vect
out <- vect[vect ! = "NA_NA"]
}
出
#> [1] "14_mter" "78_ONHY"
補充說明:這里不需要使用which()
uj5u.com熱心網友回復:
ifelse幫助檔案,提到它的三個引數test,yes和no,說:
ifelse回傳一個與test相同形狀的值,該值被填充了 充滿了從 yes 或 no 中選擇的元素,這取決于 test 中的元素是 TRUE 還是 FUE。 的元素是 "true "還是 "false"。
因此,如果測驗的長度為 1,也就是問題中的代碼的情況,那么結果的長度也將為 1。
1)使用if而不是ifelse。 if回傳所選擇的腿的值,所以只需將其分配給out。
out < - if (all( is. na(vect)))。 標點符號">)vect else vect[which(vect ! = "NA_NA")】
2)崩潰包有一個allNA函式,所以(1)的變體是:
library(collapse)
out < - if (allNA(vect))vect else vect[which(vect ! = "NA_NA")】
3)雖然不建議使用,如果你真的想使用ifelse,可以通過用list(...)包裹每個腿,使條件和兩個腿都有相同的長度,即1。
out < - ifelse(all( is. na(vect))。 list(vect)。 list(vect[which(vect ! = "NA_NA")! 標點符號">])) |>
unlist()
uj5u.com熱心網友回復:
如果NA值總是字串NA_NA,這就可以:
grep("NA_NA",vect。 值= TRUE。 反轉 = TRUE)
[1] "14_mter"/span> "78_ONHY"
雖然模式與NA_NA值相匹配,但invert = TRUE引數否定了匹配值,并產生未匹配的值
資料:
vect=c("NA_NA"。 "14_mter", "78_ONHY")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/314491.html
標籤:
上一篇:將兩個虛擬變數合并為一個新變數
