【问题标题】:How to delete an element at a time from a vector while retaining the others?如何从向量中一次删除一个元素,同时保留其他元素?
【发布时间】:2017-06-26 13:05:14
【问题描述】:

我有一个包含 5 个元素的向量 x

x <- (1,2,3,4,5)

我想在每次迭代时删除一个元素并保留向量中的其他元素。(如下所示)

x <- (2,3,4,5)     #vector after first iteration 

x <- (1,3,4,5)     #vector after second iteration 

x <- (1,2,4,5)     #vector after third iteration 

x <- (1,2,3,5)     #vector after fourth iteration 

另外,是否可以将这些新向量存储在列表中? 有没有办法将其扩展到多个向量?

【问题讨论】:

    标签: r vector row


    【解决方案1】:

    你可以使用combn:

    combn(5,4)
         [,1] [,2] [,3] [,4] [,5]
    [1,]    1    1    1    1    2
    [2,]    2    2    2    3    3
    [3,]    3    3    4    4    4
    [4,]    4    5    5    5    5
    

    list 的形式获取数据:

    as.list(data.frame(combn(5,4)))
    

    要在多个向量或矩阵上使用它,首先将其转换为data.frame,以便lapply 更容易超过data.frame 的长度(列)。然后你可以像这样使用lapplycombn

    mat <- data.frame(matrix(1:10,5))
    lapply(mat, function(x) combn(x,length(x)-1))
    
    $X1
         [,1] [,2] [,3] [,4] [,5]
    [1,]    1    1    1    1    2
    [2,]    2    2    2    3    3
    [3,]    3    3    4    4    4
    [4,]    4    5    5    5    5
    
    $X2
         [,1] [,2] [,3] [,4] [,5]
    [1,]    6    6    6    6    7
    [2,]    7    7    7    8    8
    [3,]    8    8    9    9    9
    [4,]    9   10   10   10   10
    

    【讨论】:

    • 如何将其扩展到多个向量或矩阵?
    【解决方案2】:

    我们可以的

    lapply(seq_along(x), function(i) x[-i])
    

    【讨论】:

      【解决方案3】:
      drop_n <- function(n, x) x[-n]
      lapply(1:5, drop_n, x)
      

      【讨论】:

        【解决方案4】:

        在这里,您可以得到想要的东西。你只需要更改参数n 使其更通用

            # Generate a list
              L <- list()
            # Define the number of elements
              n <- 5
            # Define the values
              values <- 1:n
        
            # Complete the list
              for (i in 1:n){
                L[[i]] <- values[-i]
              }
        

        【讨论】:

        • 如何将其扩展到矩阵?说是否要在每次迭代后删除一行。
        • 如果你有一个矩阵M,要省略第i行,只需使用M[-i,]
        猜你喜欢
        • 1970-01-01
        • 2020-07-23
        • 1970-01-01
        • 2019-10-03
        • 1970-01-01
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        相关资源
        最近更新 更多