r - 获取非 NA 列表元素的索引和值

标签 r list subset na

获取像 as.list(rep(c(NA, 4, NA), times = c(5, 1, 2))) 这样的列表,即

[[1]]
[1] NA

[[2]]
[1] NA

[[3]]
[1] NA

[[4]]
[1] NA

[[5]]
[1] NA

[[6]] # index of non-NA list element, 6
[1] 4 # ...and its corresponding value, 4 

[[7]]
[1] NA

[[8]]
[1] NA

我想提取非 NA 元素的索引(此处:6)及其对应的值(此处:4)。有什么惯用的方法可以得到这两个数字吗?

最佳答案

1) 基础 R 假设列表 L 仅包含标量和 NA,这将返回一个 2 列矩阵,每组 xy 坐标和一个属性记录哪些位置被省略。

p>

如果您不需要列名,请省略 x=y=。如果您不希望属性记录 NA 的位置,请将 [,] 附加到行尾。如果您知道只有一个标量,您可能希望将其包装在 c(...) 中以生成一个 2 元素向量。如果您更喜欢数据帧输出,请将 cbind 替换为 data.frame

na.omit(cbind(x = seq_along(L), y = unlist(L)))

2) tidyverse 或使用 tidyverse

library(tibble)
library(tidyr)

drop_na(enframe(unlist(L)))

2a) 也可以使用像这样的管道来编写:

L %>% unlist %>% enframe %>% drop_na

关于r - 获取非 NA 列表元素的索引和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69145130/

相关文章:

r - 警告和消息有什么区别?

将 R 中的 NA 值替换为按 ID 子集化的 999

在 R 中刷新 Google Analytics token

python - 如何从列表中删除小于前一个数字目标值的值

mysql - 唯一目的是指定另一个表的子集的表

matlab - 获取矩阵子集的边界单元格的索引。软件

javascript - 生成长度为 n 的子集

Rllvm 和编译器包 : R compilation

c - 返回链表上的多个节点

r - 如何将向量转换为R中的列表?