我正在处理ExcelElectron 表格形式的报告,它们的标题具有不同的缩进级别(下面的tidyxl示例结果).标题组之间的缩进级别也可能不一致,例如标题1与标题2.

contents <- c('Heading 1', 'Subheading 1', 'Item 1', 'Item 2', 'Subheading 2', 'Item 1', 'Item 2', 'Heading 2','Subheading 1','Item 1','Item 2')
indents <- c(0,1,2,2,1,2,2,0,2,4,4)
df <- data.frame(indents,contents)
   indents     contents
1        0    Heading 1
2        1 Subheading 1
3        2       Item 1
4        2       Item 2
5        1 Subheading 2
6        2       Item 1
7        2       Item 2
8        0    Heading 2
9        2 Subheading 1
10       4       Item 1
11       4       Item 2

我想生成一个标题矢量,其中的标题连接在一起,如下面的"Headings"下所示.

headings <- c('Heading 1','Heading 1 | Subheading 1','Heading 1 | Subheading 1 | Item 1','Heading 1 | Subheading 1 | Item 2','Heading 1 | Subheading 2','Heading 1 | Subheading 2 | Item 1','Heading 1 | Subheading 2 | Item 2','Heading 2','Heading 2 | Subheading 1','Heading 2 | Subheading 1 | Item 1','Heading 2 | Subheading 1 | Item 2')
data.frame(indents,contents, headings)
   indents     contents                          headings
1        0    Heading 1                         Heading 1
2        1 Subheading 1          Heading 1 | Subheading 1
3        2       Item 1 Heading 1 | Subheading 1 | Item 1
4        2       Item 2 Heading 1 | Subheading 1 | Item 2
5        1 Subheading 2          Heading 1 | Subheading 2
6        2       Item 1 Heading 1 | Subheading 2 | Item 1
7        2       Item 2 Heading 1 | Subheading 2 | Item 2
8        0    Heading 2                         Heading 2
9        2 Subheading 1          Heading 2 | Subheading 1
10       4       Item 1 Heading 2 | Subheading 1 | Item 1
11       4       Item 2 Heading 2 | Subheading 1 | Item 2

我一直在寻找解决方案,但没有找到任何我需要的东西.我想象一个paste或paste0调用在一个循环或应用功能可以做到这一点,但我还没有任何运气至今.

推荐答案

这感觉效率不是很高.我正在try 想象一个很好的嵌套列表对象,或者其他对象.也许一个更好的答案会出现.

这就是说,这样的东西可能会起作用,尽管我可能会测试一些边缘情况.它只是沿着行往下移动,并存储需要使用的以前的标题.缩进0到4存储在stored_headings向量中的索引位置1到5.

contents <- c(
  "Heading 1", "Subheading 1", "Item 1", "Item 2", "Subheading 2", "Item 1",
  "Item 2", "Heading 2", "Subheading 1", "Item 1", "Item 2"
)
indents <- c(0, 1, 2, 2, 1, 2, 2, 0, 2, 4, 4)
df <- data.frame(indents, contents)

# Store up to 5 levels of headings in memory (in this case for 0 through 4)
# Use extra level at end to avoid error in assignment below,
# so we use a vector of length 6
stored_headings <- rep(NA, 6) |> as.character()

# Logic according to indent level, using +1 on everything to
# agree with R indexing starting at 1
for (i in seq_len(nrow(df))) {

  # Store heading at appropriate level in stored_headings
  stored_headings[df$indents[i] + 1] <- df$contents[i]

  # Remove all headings below (greater indent) than current
  stored_headings[(df$indents[i] + 1 + 1):length(stored_headings)] <- NA

  # Concatenate headings, removing NA headings between or below
  df$headings[i] <- stored_headings[!is.na(stored_headings)] |>
    paste(collapse = " | ")

}

df
   indents     contents                          headings
1        0    Heading 1                         Heading 1
2        1 Subheading 1          Heading 1 | Subheading 1
3        2       Item 1 Heading 1 | Subheading 1 | Item 1
4        2       Item 2 Heading 1 | Subheading 1 | Item 2
5        1 Subheading 2          Heading 1 | Subheading 2
6        2       Item 1 Heading 1 | Subheading 2 | Item 1
7        2       Item 2 Heading 1 | Subheading 2 | Item 2
8        0    Heading 2                         Heading 2
9        2 Subheading 1          Heading 2 | Subheading 1
10       4       Item 1 Heading 2 | Subheading 1 | Item 1
11       4       Item 2 Heading 2 | Subheading 1 | Item 2

R相关问答推荐

基于R中的GPS点用方向箭头替换点

使用lapply的重新定位功能

使用R中的Shapetime裁剪格栅文件

如何在R中合并两个基准点?

使用列/行匹配将两个不同维度的矩阵相加

R—将各种CSV数字列转换为日期

线性模型斜率在减少原始数据时提供NA

用约翰逊分布进行均值比较

R:如果为NA,则根据条件,使用列名模式将缺少的值替换为另一列中的值

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

当每个变量值只能 Select 一次时,如何从数据框中 Select 两个变量的组合?

如何构建一个for循环来循环处理动物ID?

如何判断代码是否在R Markdown(RMD)上下文中交互运行?

如何获取R chromote中的当前URL?

R:使用ApexCharge更改标签在饼图中的位置

如何捕获这个shiny 的、可扩展的react 性用户输入矩阵作为另一个react 性对象,以便进一步操作?

如何在一个GGPLATE中绘制多个灰度平滑?

从字符串列中的向量中查找第一个匹配的单词

真实世界坐标的逆st_变换

通过不完全重叠的多个柱连接