我有一個關于帶有邏輯向量的向量化操作的問題。在我的問題中,有兩個向量:主要和次要向量。它們的長度相同。我想根據我從輔助向量中收集到的見解,將主向量中的一些元素替換為。NA
- 主向量由
TRUE和FALSE可以以任何隨機順序出現。 - 次要向量是:
- 一個序列,
TRUE然后是一個FALSE有/沒有NA作為最后一個元素的序列;或者 - 所有
TRUE; 或者 - 所有
FALSE; 或者 - 全部
FALSE以最后一個元素為NA;或者 - 全部
TRUE以最后一個元素為NA
- 一個序列,
我將在下面提供幾個示例并解釋所需的演算法。
A -最常見的情況
替換x其值NA對于那些位置FALSE在y
# here, `x` is the main vector
x <- c(FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, NA)
# `y` is the secondary vector
y <- c(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE)
# `z` is the desired output
z <- c(FALSE, FALSE, TRUE, FALSE, FALSE, NA, NA) # in this case only index 7 in `x` actually changed
B - 次要向量是全部 FALSE
x2 <- c(FALSE, NA)
y2 <- c(FALSE, FALSE)
# desired output
z2 <- c(NA, NA)
C - 次要向量是全部 TRUE
x3 <- rep(FALSE, 4)
y3 <- rep(TRUE, 4)
# desired output
z3 <- rep(FALSE, 4)
我的嘗試
幾乎已經弄清楚了,但不幸的是它在場景B 中失敗了。
my_func <- function(main, secondary) {
idx_last_true_in_secondary <- max(which(secondary))
if(idx_last_true_in_secondary == length(secondary)) {
return(main)
}
main[(idx_last_true_in_secondary 1): length(main)] <- NA
main
}
# case A
my_func(x, y)
#> [1] FALSE FALSE TRUE FALSE FALSE NA NA
# case B
my_func(x2, y2)
#> Warning in max(which(secondary)): no non-missing arguments to max; returning
#> -Inf
#> Error in (idx_last_true_in_secondary 1):length(main): result would be too long a vector
# case C
my_func(x3, y3)
#> [1] FALSE FALSE FALSE FALSE
我的問題是是否有人看到了解決問題的更好方法?
uj5u.com熱心網友回復:
我們可以這樣做:
my_func <- function(x, y) {
replace(x, !y, NA)
}
怎么運行的:
# A
replace(x, !y, NA)
[1] FALSE FALSE TRUE FALSE FALSE NA NA
# B
replace(x2, !y2, NA)
[1] NA NA
# C
replace(x3, !y3, NA)
[1] FALSE FALSE FALSE FALSE
my_func(x,y)
my_func(x2,y2)
my_func(x3,y3)
輸出:
> my_func(x,y)
[1] FALSE FALSE TRUE FALSE FALSE NA NA
> my_func(x2,y2)
[1] NA NA
> my_func(x3,y3)
[1] FALSE FALSE FALSE FALSE
uj5u.com熱心網友回復:
這似乎按預期作業:
my_func <- function(main,secondary ) {
main[!secondary] <- NA
return(main)
}
my_func(x,y)
[1] FALSE FALSE TRUE FALSE FALSE NA NA
my_func(x2,y2)
[1] NA NA
my_func(x3,y3)
[1] FALSE FALSE FALSE FALSE
uj5u.com熱心網友回復:
我們可以嘗試ifelse如下
> ifelse(y,x,NA)
[1] FALSE FALSE TRUE FALSE FALSE NA NA
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/394661.html
