这些报告来自quickbooks,已下载为Excel文件。请注意,左列是基于左间距的此嵌套层次结构。
我需要根据左侧的前导空格数将 Description 列划分为单独的列。
由于我最近一直在处理财务报告,因此这些报告非常常见,并且很难使用。是否有用于导入此类数据的软件包或功能?
以下是示例可重现的输入 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))
答案 0 :(得分:5)
对于这些Excel争用任务,您可以尝试tidyxl
和unpivotr
。这是文档:
这是一个不错的教程:https://blog.davisvaughan.com/post/tidying-excel-cash-flow-spreadsheets-in-r/
答案 1 :(得分:2)
我认为真正的问题是:
如果是这样,请尝试该示例,可以改进代码,但想法是每个前导空格都表示 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