【发布时间】:2018-01-31 16:43:36
【问题描述】:
我有一个包含非分隔字符串的 1 列数据表,像这样
d1 = data.table(x = c("2728661941-1945", "2657461921-1925", "2786161921-1925"))
d1
#> x
#> 1: 2728661941-1945
#> 2: 2657461921-1925
#> 3: 2786161921-1925
我有另一个表格的数据表
dic = data.table(field = c("ID","group","year"),start=c(1,6,7), length=c(5,1,9))
dic
#> field start length
#> 1: ID 1 5
#> 2: group 6 1
#> 3: year 7 9
我想用dic中的信息拆分数据表d1中的字符串,得到一个新的表单数据框
d2 = data.table(ID = c("27286", "26574", "27861"),
group = c(6, 6, 6),
year = c("1941-1945", "1921-1925", "1921-1925")
d2
#> ID group year
#> 1: 27286 6 1941-1945
#> 2: 26574 6 1921-1925
#> 3: 27861 6 1921-1925
我试过了
d2 = copy(d1)[,(dic$field) := transpose(
lapply(x, stri_sub, from = dic$start, length = dic$length))]
但是,下面的数据是列表形式,而不是真正的表格形式。我希望能够将创建的字段称为列。
我不得不承认我并不完全确定自己在做什么,而且我真的不必为此使用数据表,但我想不出另一种方法来做到这一点。我拥有的最简单的数据集包含 79 个字符的字符串,并且会生成 25 个字段,因此我不想单独提取每个字段。
我希望这是有道理的。任何建议表示赞赏。
【问题讨论】:
标签: r split data.table