如何确定列表中的哪个元素包含与其他值匹配的值?

时间:2015-10-01 04:51:32

标签: r list match

如果我有以下列表:

a <- list(1:3, 4:5, 6:9)

a
[[1]]
[1] 1 2 3

[[2]]
[1] 4 5

[[3]]
[1] 6 7 8 9

我想确定列表中哪个元素是特定值。例如,我可能想要找到数字5所属的元素。在这种情况下,它将是[[2]]

我的目标是拥有像

这样的东西
match(5,a)

返回值2

但是,此代码仅检查所选数字是否作为给定元素的完整元素存在

match(5,a)
[1] NA 

此外,取消列表只会告诉我在所有值的整个长度中我的兴趣点数在哪里:

match(5,unlist(a))
[1] 5

思想?

1 个答案:

答案 0 :(得分:1)

您可以使用grep功能

grep(5, a)
# [1] 2

grep(9, a)
# [1] 3

更新答案

在阅读@nicola之后,评论发现grep命令仅适用于属于列表开头和结尾的数字,而不适用于其间的数字。

您可以尝试以下提到的完整解决方案代码,

a <- list(1:3, 4:5, 6:9)
df <- data.frame(unlist(a))
df$group <- 0
k <- 1
i<-0
for(i in 1:length(a)) 
{ 
 x[i] <- length(unlist(a[i]))
 for(j in 1:x[i])
 {
  df$group[k] <- i
  k <- k+1
  }
}
colnames(df)[1] <- "num"
df[df$num == 5, ]$group

# [1] 2
> df[df$num == 9, ]$group
#[1] 3
df[df$num == 8, ]$group
# [1] 3