如何从R中按层次结构组织的数据中过滤非顺序标识符?

问题描述

我正在使用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创建

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...