我在R中尝试了一些搜索和数据分析。我有这样的代码:
data = matrix(
c(3, 21, 80, 208,
3, 49, 80, 1298,
5, 17, 80, 302,
8, 28, 80, 2857,
13, 08, 80, 2860,
14, 08, 80, 2860,
15, 58, 80, 208,
15, 58, 80, 463,
15, 58, 80, 2065,
15, 58, 80, 2065,
13, 05, 80, 608,
13, 08, 80, 608
),
nrow=12,
ncol=4,
byrow = TRUE)
#find a match with numbers 13 and 8 in column 1
require(AhoCorasickTrie)
keywords = c("13","8 ")
SearchNew = AhoCorasickSearch(keywords,data[,1])
SearchNew看起来像那样:
> SearchNew
[[1]]
list()
[[2]]
list()
[[3]]
list()
[[4]]
list()
[[5]]
[[5]][[1]]
[[5]][[1]]$Keyword
[1] "13"
[[5]][[1]]$Offset
[1] 1
[[6]]
list()
[[7]]
list()
[[8]]
list()
[[9]]
list()
[[10]]
list()
[[11]]
[[11]][[1]]
[[11]][[1]]$Keyword
[1] "13"
[[11]][[1]]$Offset
[1] 1
[[12]]
[[12]][[1]]
[[12]][[1]]$Keyword
[1] "13"
[[12]][[1]]$Offset
[1] 1
我想要的是列表不为空的行的索引。这意味着在这种情况下它将是5,11,12。我尝试这样做:
xyz <- vector('list', length(SearchNew))
for(i in seq_along(SearchNew)){
for(j in seq_along(SearchNew[[i]])){
if (length(SearchNew[[i]]) > 0)
xyz <- i
}
}
但是这给了我很多NULL行的矩阵。我不能给xyz只有3行,因为我不知道有多少非空行将在列表中。我是R的新人,所以我不知道如何解决这个问题。有帮助吗?
答案 0 :(得分:3)
我们可以使用lengths
查找非零length
which(lengths(SearchNew)!=0)
#[1] 5 11 12
如果我们需要对这些元素进行子集化,请使用Filter
Filter(length, SearchNew)