【问题标题】:Change the column of same values to column of all zeros in R将相同值的列更改为 R 中全零的列
【发布时间】:2019-10-22 22:59:43
【问题描述】:

假设我有一个名为:LS1 的列表,在列表中我有 20 个 100 乘 5 的矩阵。现在有些列可能只有一个重复的值,比如一列全是 100。我想让这些全是 100 到全零.我可以编写一个 for 循环来做到这一点,但我想用 lapply 和 apply 更有效地做到这一点。例如,这个矩阵的一个例子是

1 2 3 4 5
1 3 4 5 6
1 5 6 8 9

我希望将全为 1 的第一列更改为全零。

这就是我所做的:

A= lapply(LS1, function(x) {apply(x,2,function(x1)  {if(max(x1)== min(x1)) 
    {0}}}

但这会使所有值都为 NULL。任何人都可以建议使用 lapply 和 apply 来执行此操作吗?

【问题讨论】:

    标签: r list for-loop apply lapply


    【解决方案1】:

    这应该有效,尤其是对于整数矩阵。

    lapply(lst, 
           function(mat) {
              all_dupes = apply(mat, 2, function(x) length(unique(x)) ==1)
              mat[, all_dupes]  = 0L
              return(mat)
             }
    )
    

    【讨论】:

      【解决方案2】:

      这是我的解决方案:

      df <- data.frame(a = c(1, 1, 1), 
                     b = c(2, 3, 5), 
                     c = c(4, 5, 8),
                     d = c(5, 6, 9), 
                     e = c(5, 5, 5))
      
      A = data.frame(lapply(df, function(x)  x = (max(x)!=min(x))*x ))
      A
      
      > A
        a b c d e
      1 0 2 4 5 0
      2 0 3 5 6 0
      3 0 5 8 9 0
      

      如果使用sapply

      A = sapply(df, function(x)  x = (max(x)!=min(x))*x)
      A
      
           a b c d e
      [1,] 0 2 4 5 0
      [2,] 0 3 5 6 0
      [3,] 0 5 8 9 0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-11
        • 2022-08-18
        • 2021-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多