我正在使用R.从一个大型文档中提取该节中的节名和引用
我的结果目前看起来像:
df<-data.frame("sectname"=c("1","1.1","1.2","1.1.1","1.2","3","2","2.1"), "ref"=c("FALSE","2.1", "3", "FALSE","FALSE","FALSE","FALSE", "FALSE"))
然而,在层次结构[3,6]中不连续的扇区名称实际上是属于上面一行的引用。
有没有一种功能性的方法来捕捉这些并粘贴到ref[i-1]中?
期望输出:
<sectname> <ref>
1 FALSE
1.1 c("2.1","1.2","3")
1.1.1 FALSE
1.2 3
2 FALSE
2.1 FALSE
我的理解是,您希望迭代地删除sectname
中破坏其顺序的元素,并将它们粘贴到ref
中不为FALSE的元素上。
这可以通过while
循环来实现。唯一的问题是ref
最终比sectname
长,因为您将sectname
缩短,但保留了ref
的长度。因此,它们不能保留为数据帧列。
从数据结构来看,我怀疑这些数据并不自然地属于行。以下是如何进行转换。我需要将结果作为向量,因为不清楚它们应该属于哪种数据结构
extras <- character()
sectname <- df$sectname
ref <- df$ref
while(TRUE)
{
vals <- which(diff(order(sectname)) != 1)
if(length(vals) == 0) break
i <- vals[1] + 1
extras <- c(extras, sectname[i])
sectname <- sectname[-i]
}
ref[which(ref != "FALSE")] <- paste(ref[which(ref != "FALSE")], extras)
ref
#> [1] "FALSE" "2.1 1.2" "3 3" "FALSE" "FALSE" "FALSE" "FALSE"
#> [8] "FALSE"
sectname
#> [1] "1" "1.1" "1.1.1" "1.2" "2" "2.1"
由reprex包于2020-08-25创建(v0.3.0(