我的数据结构如下:
m
[[1]]
[[1]][[1]]
[1] "g" "g" "h" "k" "k" "k" "l"
[[2]]
[[2]][[1]]
[1] "g" "h" "k" "k" "k" "l" "g"
[[3]]
[[3]][[1]]
[1] "g" "h" "h" "h" "k" "l" "h"
我想同时查找每个唯一字符的位置。我可以分别使用以下代码获取每个字符的位置:
t<-list()
for (i in 1:length(m)){
for (j in m[[i]][[1]]){
if (j=="k"){
t[[i]]<-grep(j,m[[i]][[1]],fixed=TRUE)}}}
我得到的结果如下:
t
[[1]]
[1] 4 5 6
[[2]]
[1] 3 4 5
[[3]]
[1] 5
列表m中有4个唯一字符,使用我的代码,我将获得4个具有唯一字符位置的列表,但我必须手动将每个字符输入循环。我只需要一个代码即可计算所有 同时具有唯一字符。
答案 0 :(得分:1)
列表中的向量似乎都具有相等的长度(如果没有,则可以通过使其长度相等来进行调整)。我将首先重组数据:
m <- list(list(c("g", "g", "h", "k", "k", "k", "l")),
list(c("g", "h", "k", "k", "k", "l", "g")))
m <- do.call(rbind, lapply(m, "[[", 1))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#[1,] "g" "g" "h" "k" "k" "k" "l"
#[2,] "g" "h" "k" "k" "k" "l" "g"
然后,您可以使用outer
一次进行所有比较:
res <- which(outer(m, unique(c(m)), "=="), arr.ind = TRUE)
res <- as.data.frame(res)
res$dim3 <- factor(res$dim3, labels = unique(c(m)))
names(res) <- c("list_element", "vector_element", "letter")
#check
res[res$letter == "k" & res$list_element == 1, "vector_element"]
[1] 4 5 6
如果您的数据量很大,此解决方案将无法正常工作。
答案 1 :(得分:0)
我们可以对<?php
$xml=simplexml_load_file("zoo.xml") or die("Error: Cannot create object");
foreach($xml->children() as $desc) {
echo $desc->title . " ";
echo $desc->price . " лв. ";
echo ' some text here' . "<br>";
}
?>
使用双循环,在lapply
中对每个which
值使用unique
检查位置
m
要确定哪些值代表哪个字符,我们可以命名lst <- lapply(unique(unlist(m)), function(x)
lapply(m, function(y) which(x == y[[1]])))
lst
#[[1]]
#[[1]][[1]]
#[1] 1 2
#[[1]][[2]]
#[1] 1 7
#[[1]][[3]]
#[1] 1
#[[2]]
#[[2]][[1]]
#[1] 3
#[[2]][[2]]
#[1] 2
#[[2]][[3]]
#[1] 2 3 4 7
......
list