R 字符串从数字中分割单词并保持固定的子字符串计数
我有一份pdf格式的资产负债表。它有4列;变量名称、本年的值、上一年的值以及本年和上一年之间的差异。我没有共享pdf的权限,但这是一个示例 这是我尝试使用的代码:R 字符串从数字中分割单词并保持固定的子字符串计数,r,string,pdf,R,String,Pdf,我有一份pdf格式的资产负债表。它有4列;变量名称、本年的值、上一年的值以及本年和上一年之间的差异。我没有共享pdf的权限,但这是一个示例 这是我尝试使用的代码: Assets <- BS[4:40] %>% trimws("l") %>% strsplit(split = "\\s{2,}"); Assets 我希望最终得到一个包含4列的数据框;行项目、当前年度、上一年度、变更 我想将[2:5]中的每个字符串拆分为4个子字符串
Assets <- BS[4:40] %>%
trimws("l") %>%
strsplit(split = "\\s{2,}"); Assets
Line_Item Current_Year Prior_Year Change
CASH 99,999,999.00 99,999,999.00 0.00
CASH SLIPS 1,000,000.00 1,000,000.00 0.00
BONDS 0.00 500,000.00 (500,000.00)
ACCOUNTS RECEIVABLE 1,000,000.00 2,000,000.00 (1,000,000.00)
dput:
list(c("CASH", "$99,999,999.00", "$99,999,999.00", "0.00"),
c("CASH SLIPS", "1,000,000.00", "1,000,000.00", "0.00"
), c("BONDS", "500,000.00", "(500,000.00)"
), c("ACCOUNTS RECEIVABLE", "1,000,000.00", "2,000,000.00",
"(1,000,000.00)"))
您可以创建一个函数来确定是否缺少第三个值:
m <- function(x){
if(length(x)==4) return(x)
if(grepl("\\)", x[3])) c(x[1],0,x[-1])
else c(x[1:2],0, x[3])
}
data.frame(t(sub("\\$","",sapply(mystring, m))))
X1 X2 X3 X4
1 CASH 99,999,999.00 99,999,999.00 0.00
2 CASH SLIPS 1,000,000.00 1,000,000.00 0.00
3 BONDS 0 500,000.00 (500,000.00)
4 ACCOUNTS RECEIVABLE 1,000,000.00 2,000,000.00 (1,000,000.00)
m这是一个字符列表。在第4个元素中,本年度没有0。你是怎么决定Blanker的位置的?我被困在这个问题上了。我希望能够直观地做到这一点。问题是,除非有一些规则允许您在问题中包含dput(资产)
的结果,否则无法确定本年或上一年的空白
m <- function(x){
if(length(x)==4) return(x)
if(grepl("\\)", x[3])) c(x[1],0,x[-1])
else c(x[1:2],0, x[3])
}
data.frame(t(sub("\\$","",sapply(mystring, m))))
X1 X2 X3 X4
1 CASH 99,999,999.00 99,999,999.00 0.00
2 CASH SLIPS 1,000,000.00 1,000,000.00 0.00
3 BONDS 0 500,000.00 (500,000.00)
4 ACCOUNTS RECEIVABLE 1,000,000.00 2,000,000.00 (1,000,000.00)