這是我的功能:
my_func <- function(x){
ifelse(duplicated(x), NA_real_, first(x))
}
我想將它應用到這個向量:
vector <- c(1,1,1,3,3,3)
[1] 1 1 1 3 3 3
我的預期輸出:
[1] 1 NA NA 3 NA NA
我試過了sapply:
sapply(vector, my_func)
gives:
[1] 1 1 1 3 3 3
or changed the function to
my_func <- function(x){
ifelse(duplicated(x), NA_real_, x)
}
uj5u.com熱心網友回復:
replace_dup = function(x, val = NA_real_) {
x[duplicated(x)] = val
x
}
replace_dup(vector)
[1] 1 NA NA 3 NA NA
duplicated(x)將TRUE用于您要替換的索引,因此您可以通過這些索引對向量進行子集化并替換它們。
我不知道為什么ifelse(duplicated(x), NA_real_, x)不適合你,因為這也是一個有效的解決方案(雖然稍微復雜一些)。當我運行它并產生正確的結果時它作業正常。
至于sapply()- 如果您有一個要應用此功能的串列,那將起作用:
vectors = list(c(1, 1, 2, 1, 3), c(5, 5, 5))
sapply(vectors, replace_dup)
[[1]]
[1] 1 NA 2 NA 3
[[2]]
[1] 5 NA NA
編輯:正如評論中提到的 -sapply()這里的問題是該函式已經設計為與整個向量一起使用。sapply(vector, replace_dup)將適用replace_dup()于 的每個單獨元素vector,從而不會識別出重復項:
sapply(vector, replace_dup)
[1] 1 1 1 3 3 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/408135.html
標籤:
