R 代码迭代列表,将它们组合成带有分组变量的数据框?

问题描述 投票:0回答:1

我的任务是从大量复杂的 XML Esri Workspace 文件中收集表名称、分组变量、变量名称和变量值。在最基本的层面上,我在迭代我能够生成的列表时遇到了麻烦,这些列表以重复分组变量名称和值的方式包含分组变量。

因此,对于表名列表

(table 1, table 2)
以及变量名
(A, B)
和值
(1, 2)
的列表,我希望将数据框组合在一起,如下所示:

TABLE    NAME   VALUE
table 1  A      1 
table 1  B      2
table 2  A      1
table 2  B      2

该方法需要足够灵活,以适应文件中不同长度的多层组。

最简单的形式,对于两个表名称和两个变量名称的列表:

这是我最好的尝试,使用 for 循环来做到这一点。相反,它单独循环每个列表,而不是复制对每个变量名称进行分组的表名称:

tableNames <- c(seq(1:2))  
varNames <- c("A", "B")  

results <- cbind(rep(0, length(tableNames) + length(varNames)), 0)  
for(i in seq_along(tableNames)){  
    results3[i, 1] <- tableNames[i]   
  for(j in seq_along(varNames)){  
    results3[i, 2] <- varNames[j]  
  }  
}  
results

...[,1] [,2]
[1,]“1”“B”
[2,]“2”“B”
[3,]“0”“0”
[4,]“0”“0”

我希望结果是这样的:

...[,1] [,2]
[1,]“1”“A”
[2,]“1”“B”
[3,]“2”“A”
[4,]“2”“B”

r list iteration grouping
1个回答
0
投票

我们可以使用

crossing
包中的
tidyr

tableNames <- c(seq(1:2))  
varNames <- c("A", "B")  

crossing(tableNames, varNames)
tableNames varNames
       <int> <chr>   
1          1 A       
2          1 B       
3          2 A       
4          2 B     
© www.soinside.com 2019 - 2024. All rights reserved.