【发布时间】:2018-10-22 23:30:29
【问题描述】:
我有一个 R data.table,其中有一列格式奇怪的数据,我需要对其进行解析。对于每一行,都有一个列identity,格式如下:
identity
cat:211:93|dog:616:58|bird:1270:46|fish:2068:31|horse:614:1|cow:3719:1012
格式为name:total_number:count_number,以|分隔
data.table的一个例子如下:
library(data.table)
foo = data.table(name = c('Luna', 'Bob', 'Melissa'),
number = c(23, 37, 33),
identity = c('cat:311:93|dog:516:58|bird:2270:46|fish:1268:31|horse:514:1|cow:319:12', 'bird:1270:35|fish:2068:11|horse:614:44|cow:319:21', 'fish:72:41'))
print(foo)
name number identity
'Luna' 23 cat:311:93|dog:516:58|bird:2270:46|fish:1268:31|horse:514:1|cow:319:12
'Bob' 37 bird:1270:35|fish:2068:11|horse:614:44|cow:319:21
'Melissa' 33 fish:72:41
我的问题是如何解析这些行,使每个name 成为一个新列,并且数字被计算为一个分数,count_number/total_number。
正确的格式如下:
name number cat dog bird fish horse cow
'Luna' 23 0.2990354 0.1124031 0.02026432 0.02444795 0.001945525 0.03761755
'Bob' 37 NA NA 0.02755906 0.005319149 0.001628664 0.03761755
'Melissa' 33 NA NA NA 0.5694444 NA NA
如果我事先知道列的“名称”,我该如何解析这些行?
我认为应该有一些方法可以使用data.table::tstrsplit(),例如
tstrsplit(foo$identity, "|", fixed=TRUE)
(我也很乐意使用 data.frame 或 dplyr。)
【问题讨论】:
标签: r parsing dataframe data.table