【发布时间】:2016-06-18 01:34:43
【问题描述】:
说实话,这对我来说不是一个容易的问题。我搜索了很长时间,但似乎没有类似的问题。
这是我的数据的几行和几列的样子:
V1 V2 V3
1 74c1c25f4b283fa74a5514307b0d0278 1#11:2241 1#10:249
2 08f5b445ec6b29deba62e6fd8b0325a6 20#7:249 20#5:83
3 4b7f6f4e2bf237b6cc58f57142bea5c0 4#16:249 24:913
因此,单元格的格式类似于“class(#subclass):value”。我想做一个这样的表:
V1 1#10 1#11 4#16 20#5 20#7 24
1 74c1c25f4b283fa74a5514307b0d0278 249 2241 0 0 0 0
2 08f5b445ec6b29deba62e6fd8b0325a6 0 0 0 83 249 0
3 4b7f6f4e2bf237b6cc58f57142bea5c0 0 0 249 0 0 913
因为我之前没有遇到过这种数据结构,我不确定这是否是最好的存储方式。但到目前为止,这是我能想到的唯一表格格式。如果您对此有任何建议,请发表评论。
然后,我先解析如下:
V1 V2_1_1 V2_1_2 V2_2_1 V3_1_1 V3_1_2 V3_2_1
1 74c1c25f4b283fa74a5514307b0d0278 1 11 2241 1 10 249
2 08f5b445ec6b29deba62e6fd8b0325a6 20 7 249 20 5 83
3 4b7f6f4e2bf237b6cc58f57142bea5c0 4 16 249 24 NA 913
现在,我不知道如何将其转换为我想要的表格格式。我可以使用 R 中的任何包来执行此操作吗?
下面附上两个链接
原始数据:https://www.dropbox.com/s/aqay5dn4r3m3kdp/temp1TrainPoiFile.R?dl=0
解析数据: https://www.dropbox.com/s/0oj8ic1pd2rew0h/temp3TrainPoiFile.R?dl=0
非常感谢您的帮助。如果对此有任何疑问,请发表评论。
感谢沃尔特和杰克的回答。我用tidyr 解决了这个问题。以下是我的做法。
读取文件
source("temp1TrainPoiFile.R")
将列收集到键值对
temp2TrainPoiFile <- temp1TrainPoiFile %>% gather( key=V1, value=data, -V1)
提取到两列
temp3TrainPoiFile <- temp2TrainPoiFile %>% extract(col=data, into=c("class","value"), regex="(.*):(.*)")
添加行号
row <- 1:nrow(temp3TrainPoiFile)
temp3TrainPoiFile <- cbind(row, temp3TrainPoiFile)
将键值分布到两列
TrainPoiFile <- temp3TrainPoiFile %>% spread(key=class, value=value, fill=0)
【问题讨论】:
-
你应该发帖
dput(head(dfrm))。目前,该数据的打印表示非常模糊。对于这种操作,您会发现使用字符数据比使用因子数据更容易。这些是键值数据,您正在尝试以“宽”格式构建数据集。看起来好像您“过度解析”了数据。您如何保持八字形与数字的原始关联。列名不应该以十进制字符开头,因此除非您接受前导“X”作为列名,否则您将来可能会做更多不必要的工作。 -
在 key-value 和 Wide 上搜索会得到这组可能有用的答案:stackoverflow.com/questions/29952780/…
-
@42- 非常感谢您的快速评论。我在上面附上了两个文件。我会检查你发布的链接。