索引数字向量列表的多个数字

时间:2014-11-21 10:57:15

标签: r list vector indexing

我有一个不同长度向量1s和2s的列表,我试图根据nchar和身份,即1, 2, c(1,1), c(2,2), c(2,1), c(1,2)来提取向量。我的问题是确定包含nchar > 1组合c(1,1), c(2,2), c(2,1), c(1,2)的向量。

#dummy code

`T1,T2` <- 1
`T2,T1` <- 2
`T2,T3` <- c(2,1)
`T3,T2` <- c(2,2)
`T3,T4` <- c(1,1)
`T4,T4` <- c(1,2)
 lst <- list(`T1,T2`=`T1,T2`, `T2,T1`=`T2,T1`, `T2,T3`=`T2,T3`, `T3,T2`=`T3,T2`, `T3,T4`=`T3,T4`, `T4,T4`=`T4,T4`)

 single <- lst[nchar(lst)==1] # only lists with nchar==1
 multiple <- lst[nchar(lst) > 1] # only lists with nchar > 1

 # identify single lists which contain 1s and 2s
 single_1s <- single[single==1] # single vectors for 1s
 single_2s <- single[single==2] # single vectors for 2s

我如何对我的示例中的多个列表执行相同的操作?

尝试识别包含任何组合c(1,1), c(2,2), c(2,1), c(1,2)的多个列表,例如

multiple[multiple==c(1,1)] # Does not work

任何指针都将受到高度赞赏,谢谢

1 个答案:

答案 0 :(得分:1)

您可以创建所有需要匹配的向量的list。然后使用lapply/sapply==indxlst的每个元素与multiple匹配

 indxlst <- list(c(1,1), c(2,2), c(2,1), c(1,2))
 lapply(indxlst, function(x) 
         multiple[sapply(multiple, function(y) all(y==x))])

如果您需要count

 sapply(indxlst, function(x) sum(sapply(multiple,
                              function(y) all(y==x))))