如果我有以下列表:
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
思想?
答案 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