【发布时间】:2015-01-22 19:32:31
【问题描述】:
我想分析 Quicken 多年的家庭财务记录。我将文件导出到 qif 并使用 bank2csv 程序渲染 csv。在 Quicken 中,可以使用一个类别(例如汽车、税收)、子类别(例如汽车:服务、汽车:燃料)和标签(例如,自我、配偶、儿子)。 bank2csv 将 categories:subcategories/tag 呈现为连接字符串。我想将类别放在类别列中,将子类别放在子类别列中,并将任何标签放在标签列中。我看到了a similar question,但是很遗憾,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 = "/") ]
【问题讨论】:
标签: r string data.table