我想分析多年的Quicken家庭财务记录。我将文件导出为qif并使用bank2csv程序呈现为csv。在Quicken中,可以使用类别(例如汽车,税收),子类别(例如汽车:服务,汽车:燃料)和标签(例如自己,配偶,儿子)。bank2csv将类别:子类别/标签渲染为连接字符串。我想将类别放入类别列中,子类别放入子类别列中,并将标签放入标签列中。我看到了一个类似的问题,但遗憾的是,那个方法通过
简化样例
我如何创建第三和第四列: 类别,标签。一些标签可能是
我可以做以下操作,但它并不能帮助我更进一步。我需要一种指定结果列表中第一个或第二个元素的方法(而不是整个列表)。
strsplit
然后使用unlist
以及按索引对每个元素进行赋值来运行。这在此处不起作用,因为有时没有标签,有时没有子类别。将字符串拆分为列表并将该列表保存在一列中非常容易,但是如何将列表的第一个元素分配到一个列中,如果存在第二个元素,则将其分配到第二个列中。肯定有一种优雅且简单的方法。简化样例
library(data.table)
library(stringi)
dt <- data.table(category.tag=c("toys/David", "toys/David", "toys/James", "toys", "toys", "toys/James"), transaction=1:6)
我如何创建第三和第四列: 类别,标签。一些标签可能是
NA
。我可以做以下操作,但它并不能帮助我更进一步。我需要一种指定结果列表中第一个或第二个元素的方法(而不是整个列表)。
dt[, category:= strsplit(x = category.tag, split = "/") ]
concat.split
本质上是Gabor的read.table
方法,而cSplit
则是使用strsplit
的更快实现。到1.6版本时,我计划转移到stri_split
,这将会更快。这里是一个(功能性)玩具实现,展示了cSplit
即将到来的样子。 - A5C1D2H2I1M1N2O1R2T1sep =“:| /”
,或者分类是第一个,子类别是冒号后面的任何内容,标签是斜杠/后面的任何内容? - Farrel