首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >替换列表元素中的值

替换列表元素中的值
EN

Stack Overflow用户
提问于 2018-10-23 02:25:20
回答 3查看 41关注 0票数 0

我有以下两个列表:

代码语言:javascript
复制
list1 <- list(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1), c(1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0), c(0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1))
list2 <- list(c(9, 10, 11, 12, 13), c(5, 6, 7, 8, 9, 10, 11, 12, 13), c(1, 2, 3, 8, 9, 10, 11, 12, 13))

list2表示我想要转换为0list1中的位置。换句话说,我希望list1的第一个元素中的第9、10、11、12和13个值为0;我希望list1的第二个元素中的第5到13个值为0;依此类推。结果列表应如下所示:

代码语言:javascript
复制
list3 <- list(c(1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0), c(1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0), c(0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0))

我该怎么做呢?谢谢!

EN

回答 3

Stack Overflow用户

发布于 2018-10-23 02:32:04

我们可以使用tidyverse中的purrr::map2实现这一点

代码语言:javascript
复制
list1 <- list(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1), c(1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0), c(0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1))
list2 <- list(c(9, 10, 11, 12, 13), c(5, 6, 7, 8, 9, 10, 11, 12, 13), c(1, 2, 3, 8, 9, 10, 11, 12, 13))

library(purrr)
map2(
  .x = list1,
  .y = list2,
  .f = function(list, indexes){
    list[indexes] <- 0
    list
  }
)
#> [[1]]
#>  [1] 1 1 1 1 1 1 1 1 0 0 0 0 0
#> 
#> [[2]]
#>  [1] 1 1 1 1 0 0 0 0 0 0 0 0 0
#> 
#> [[3]]
#>  [1] 0 0 0 1 1 1 1 0 0 0 0 0 0

reprex package于2018-10-22创建(v0.2.0)。

票数 2
EN

Stack Overflow用户

发布于 2018-10-23 02:32:10

下面是一个使用for循环的快速而肮脏的方法:

代码语言:javascript
复制
for(i in 1:length(list1)){
  list1[[i]][list2[[i]]]<-0
}

我相信有人可以使用lapply或purrr中的函数来改进这一点。

票数 2
EN

Stack Overflow用户

发布于 2018-10-23 02:33:09

在基数R中使用简单的循环,

代码语言:javascript
复制
for(i in 1:length(list1)) {
   list1[[i]][list2[[i]]] <- 0
}

> list1
[[1]]
 [1] 1 1 1 1 1 1 1 1 0 0 0 0 0

[[2]]
 [1] 1 1 1 1 0 0 0 0 0 0 0 0 0

[[3]]
 [1] 0 0 0 1 1 1 1 0 0 0 0 0 0

您也可以使用如下所示的mapply()来执行此操作,使用SIMPLIFY=F强制函数以列表形式返回。

代码语言:javascript
复制
funfun <- function(x, y, recode=0) {
   x[y] <- recode
   return(x)
}

mapply(list1, list2, FUN=funfun, SIMPLIFY=F)
[[1]]
 [1] 1 1 1 1 1 1 1 1 0 0 0 0 0

[[2]]
 [1] 1 1 1 1 0 0 0 0 0 0 0 0 0

[[3]]
 [1] 0 0 0 1 1 1 1 0 0 0 0 0 0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52935557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档