从列表列表中删除 NA

标签 r tapply

我有一个矩阵 data.mat,它看起来像:

A B C D E  
45 43 45 65 23   
12 45 56 NA NA   
13 4  34 12 NA  

我试图把它变成一个列表列表,其中每一行都是一个更大列表中的一个列表。我执行以下操作:
list <- tapply(data.mat,rep(1:nrow(data.mat),ncol(data.mat)),function(i)i)

这给了我一个列表列表,包括 NAs,例如:
$`1`  
 [1]  45 43 45 65 23  
$`2`  
 [1]  12 45 56 NA NA  
$`3`  
 [1]  13 4 34 12 NA  

但我想要的是:
$`1`  
 [1]  45 43 45 65 23  
$`2`  
 [1]  12 45 56   
$`3`  
 [1]  13 4 34 12   

在 tapply 调用期间或事后,是否有删除 NA 的好方法?

最佳答案

当然,您可以使用 lapply像这样:

> lapply(list, function(x) x[!is.na(x)])
$`1`
[1] 45 43 45 65 23

$`2`
[1] 12 45 56

$`3`
[1] 13  4 34 12

关于从列表列表中删除 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25777104/

相关文章:

r - 查找一列的最大值(按组)并将值插入到 R 中的另一个数据框中

r - 如何关闭plot3D的 "Hit <Return> to see next plot"提示?

r - 当数据是tapply的函数时如何在R中使用ggplot2

r - 根据组缩放所有值

r - 使用 lapply 后将列名指定为行名

R:如何根据一个精确匹配和一个最近(日期)匹配合并数据框?

r - 在R Shiny而不是底部的绘图顶部显示X轴?

r - 根据其他列减去该列的最小值

r - 在 R 中绘制来自 tapply 输出的数据

r - diagrammer - 如何在我的流程图中添加武器?