问题描述
我正在使用R从大型文档中提取该部分中的部分名称和引用。
我的搜索结果当前如下:
df<-data.frame("sectname"=c("1","1.1","1.2","1.1.1","3","2","2.1"),"ref"=c("FALSE","2.1","FALSE","FALSE"))
但是,在层次结构[3,6]中非连续的宗派名称实际上是属于上述行的引用。
是否有捕获这些内容并将其粘贴到ref [i-1]的功能性方法?
所需的输出:
<sectname> <ref>
1 FALSE
1.1 c("2.1","3")
1.1.1 FALSE
1.2 3
2 FALSE
2.1 FALSE
解决方法
我的理解是,您想迭代地删除sectname
破坏其顺序的元素,然后将其粘贴到ref
那些不为假的元素上。
这可能与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 package(v0.3.0)于2020-08-25创建