首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >查找R中列表中一个数字的所有索引

查找R中列表中一个数字的所有索引
EN

Stack Overflow用户
提问于 2016-04-09 22:34:37
回答 1查看 148关注 0票数 0

我有一个矩阵列表(每个矩阵中有2行和不同的列数)。每个矩阵中的第一行在这里是有意义的。我想要一种有效的方法,在列表的每个元素中找到列,其中包含一定的值。列表中每个元素的第一行都具有所有唯一值。请考虑下面的示例列表。

代码语言:javascript
代码运行次数:0
运行
复制
> example <- list(matrix(1:6, nrow = 2), matrix(c(1,5,6,4,3,6,4,6,7,9), nrow = 2), matrix(c(1,7,5,9), nrow = 2))
> example
[[1]]
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

[[2]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    6    3    4    7
[2,]    5    4    6    6    9

[[3]]
     [,1] [,2]
[1,]    1    5
[2,]    7    9

如果我想在列表的每个元素的第一行中找到数字"3“的出现,返回的对象将如下所示,

代码语言:javascript
代码运行次数:0
运行
复制
> index <- matrix(c(1, 2, 3, 2, 3, 0), ncol = 2)
> index
     [,1] [,2]
[1,]    1    2
[2,]    2    3
[3,]    3    0

在输出矩阵中," 3“出现在第2列的第1元素中,在第3列的第2元素中,而在第3元素中不出现。

我可以使用双for循环,我希望有一个更有效的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-09 22:52:58

这只是在每个元素的第一行上对列表应用which(),如果结果没有长度(is integer(0)),则为零。然后我们将其绑定到一个序列,即s的长度(或example的长度,相同的东西)。

代码语言:javascript
代码运行次数:0
运行
复制
s <- lapply(example, function(x) {
    if(!length(w <- which(x[1,] == 3))) 0 else w
})

cbind(seq_along(s), unlist(s))
#      [,1] [,2]
# [1,]    1    2
# [2,]    2    3
# [3,]    3    0
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36523534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档