【问题标题】:Replace vector elements with indexes from list of positions用位置列表中的索引替换向量元素
【发布时间】:2022-01-25 05:17:11
【问题描述】:

我有一个值向量:

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 的值替换为NA(或其他)。

预期输出是长度为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 解决方案是首选。

【问题讨论】:

    标签: r list apply


    【解决方案1】:

    我们可以遍历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
    

    【讨论】:

    • 那个输出是y的元素,应该变成NA...
    • 能否请您简单解释一下\(x)
    • @TarJae 来自R 4.0,lambda 函数(function (x))的语法记法可以用\(x) 中的base R 来简明。即这里的xlist的每个元素
    • 要明确一点,在第二种情况下,没有 lambda 函数,即 x = yxis.na&lt;- 的参数名称
    【解决方案2】:

    这是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
    

    【讨论】:

      猜你喜欢
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2011-10-07
      • 2018-10-28
      • 1970-01-01
      相关资源
      最近更新 更多