在指定整数上的R lappy

在指定整数上的R lappy,r,list,lapply,R,List,Lapply,我有以下数组df A B C D E F G [1,] 0 -4 12 33 -4 -1 -4 [2,] 1 -3 13 34 -3 0 -3 [3,] 2 -2 14 35 -2 1 -2 [4,] 3 -1 15 36 -1 2 -1 [5,] 4 0 16 37 0 3 0 [6,] 5 1 17 38 1 4 1 df的str如下所示: int [1:6, 1:7] 0 1 2 3 4 5 ... - attr(*, "di

我有以下数组
df

      A  B  C  D  E  F  G
[1,]  0 -4 12 33 -4 -1 -4
[2,]  1 -3 13 34 -3  0 -3
[3,]  2 -2 14 35 -2  1 -2
[4,]  3 -1 15 36 -1  2 -1
[5,]  4  0 16 37  0  3  0
[6,]  5  1 17 38  1  4  1
df的
str
如下所示:

int [1:6, 1:7] 0 1 2 3 4 5  ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:7] "A" "B" "C" "D" ...
我想,对于每一列,提取大于0的元素,但是保留列名,比如生成一个列表。一种方法是使用lappy

lapply(df,  function(x) x[which(x > 0)])
但有两个问题:

  • 对于许多操作来说非常慢(本质上是一个循环)

  • 并不总是产生一个列表,这对我来说是必要的(如果所有原始元素碰巧都是正数,它会保持原样)


  • 有比Lappy更好的解决方案吗

    您有矩阵吗?请提供
    dput(df)
    。你在那里展示的似乎是一个矩阵。请发布
    class(df)
    的结果。我打赌它是一个矩阵。请将完整的输出放入问题中。但这是一个矩阵。无论如何,你不能比
    lappy(如.data.frame(m),function(x)x[x>0])做得更好。
    当你在矩阵上使用lappy时,它会按单元格而不是按列计算。