2015-10-01 35 views
1

如果我有以下列表:如何確定列表中的哪個元素包含與某個其他值匹配的值?

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

此外,什麼是談論R A列表的元素/部件時,正確的行話? – theforestecologist

+2

[快速獲取列表中匹配的索引的方法]的可能重複(http://stackoverflow.com/questions/11002391/fast-way-of-getting-index-of-match-in-list) –

回答

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 
+2

這贏得了'總是工作。 'grep(2,a)'給出'integer(0)'。 – nicola

+0

感謝@nicola提到這一點。我沒有注意到。我已經更新了答案。 –

相關問題