用位置列表中的索引替换向量元素
Replace vector elements with indexes from list of positions
我有一个值向量:
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))
我想为列表 l
.
中的每个元素用 NA(或其他)替换 y
的值
预期输出是一个长度为 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
首选 Base R 解决方案。
我们可以遍历 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
这是 lapply
的基础 R 解决方案。
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
我有一个值向量:
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))
我想为列表 l
.
y
的值
预期输出是一个长度为 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
首选 Base R 解决方案。
我们可以遍历 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
这是 lapply
的基础 R 解决方案。
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