我的任务是从大量复杂的 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”
我们可以使用
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