根据前导空格的数量将一列分成新列

时间:2018-08-09 01:56:30

标签: r excel whitespace indentation quickbooks

这些报告来自quickbooks,已下载为Excel文件。请注意,左列是基于左间距的此嵌套层次结构。

我需要根据左侧的前导空格数将 Description 列划分为单独的列。

由于我最近一直在处理财务报告,因此这些报告非常常见,并且很难使用。是否有用于导入此类数据的软件包或功能?

enter image description here

以下是示例可重现的输入 dataframe

df1 <- structure(list(Description = c("asset", " current asset", "   bank acc", 
                                      "    banner", "    clearing",
                                      "   total bank accounts",
                                      " total current assets"),
                 Total = c(NA, NA, NA, 10L, 20L, 30L, 30L)),
            .Names = c("Description", "Total"), 
            class = "data.frame", 
            row.names = c(NA, -7L))

2 个答案:

答案 0 :(得分:5)

对于这些Excel争用任务,您可以尝试tidyxlunpivotr。这是文档:

这是一个不错的教程:https://blog.davisvaughan.com/post/tidying-excel-cash-flow-spreadsheets-in-r/

答案 1 :(得分:2)

我认为真正的问题是:

  • “如何处理前导空格数以表示 n 列?”

如果是这样,请尝试该示例,可以改进代码,但想法是每个前导空格都表示 nth 列。

# example input, we will have similar input after reading in
# the Excel sheet into R.
df1 <- data.frame(x = c("x1", " x2", " x2", "  x3", "x1", " x2"),
                  y = c(NA,      22,    33,      44,   55,   66),
                  stringsAsFactors = FALSE)

library(dplyr)

cbind(
  bind_rows(
  lapply(df1$x, function(i){
    x <- data.frame(t(strsplit(i, split = " ")[[1]]), stringsAsFactors = FALSE)
    colnames(x) <- paste0("col", 1:ncol(x))
    x
    })
  ),
  df1[, "y", drop = FALSE])

#   col1 col2 col3  y
# 1   x1 <NA> <NA> NA
# 2        x2 <NA> 22
# 3        x2 <NA> 33
# 4             x3 44
# 5   x1 <NA> <NA> 55
# 6        x2 <NA> 66