我有一個值向量:
y=c(2,3,4,4,3,2,1,1)
以及位置向量串列:
l=list(c(1,2),c(2,3),c(3,4),c(4,5),c(5,6),c(6,7),c(7,8),c(8,1))
我想y用 NA(或其他)替換list 中每個元素的值l。
預期輸出是一個長度串列length(l):
[[1]]
[1] NA NA 4 4 3 2 1 1
[[2]]
[1] 2 NA NA 4 3 2 1 1
[[3]]
[1] 2 3 NA NA 3 2 1 1
[[4]]
[1] 2 3 4 NA NA 2 1 1
[[5]]
[1] 2 3 4 4 NA NA 1 1
[[6]]
[1] 2 3 4 4 3 NA NA 1
[[7]]
[1] 2 3 4 4 3 2 NA NA
[[8]]
[1] NA 3 4 4 3 2 1 NA
首選基礎 R 解決方案。
uj5u.com熱心網友回復:
我們可以回圈遍歷list,使用replace'y' 值的索引來NA
lapply(l, \(x) replace(y, x, NA))
[[1]]
[1] NA NA 4 4 3 2 1 1
[[2]]
[1] 2 NA NA 4 3 2 1 1
[[3]]
[1] 2 3 NA NA 3 2 1 1
[[4]]
[1] 2 3 4 NA NA 2 1 1
[[5]]
[1] 2 3 4 4 NA NA 1 1
[[6]]
[1] 2 3 4 4 3 NA NA 1
[[7]]
[1] 2 3 4 4 3 2 NA NA
[[8]]
[1] NA 3 4 4 3 2 1 NA
或者另一種選擇是 is.na<-
lapply(l, `is.na<-`, x = y)
[[1]]
[1] NA NA 4 4 3 2 1 1
[[2]]
[1] 2 NA NA 4 3 2 1 1
[[3]]
[1] 2 3 NA NA 3 2 1 1
[[4]]
[1] 2 3 4 NA NA 2 1 1
[[5]]
[1] 2 3 4 4 NA NA 1 1
[[6]]
[1] 2 3 4 4 3 NA NA 1
[[7]]
[1] 2 3 4 4 3 2 NA NA
[[8]]
[1] NA 3 4 4 3 2 1 NA
uj5u.com熱心網友回復:
這是一個基本的 R 解決方案lapply。
lapply(l, \(x) {is.na(y) <- x; y})
#[[1]]
#[1] NA NA 4 4 3 2 1 1
#
#[[2]]
#[1] 2 NA NA 4 3 2 1 1
#
#[[3]]
#[1] 2 3 NA NA 3 2 1 1
#
#[[4]]
#[1] 2 3 4 NA NA 2 1 1
#
#[[5]]
#[1] 2 3 4 4 NA NA 1 1
#
#[[6]]
#[1] 2 3 4 4 3 NA NA 1
#
#[[7]]
#[1] 2 3 4 4 3 2 NA NA
#
#[[8]]
#[1] NA 3 4 4 3 2 1 NA
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393453.html
