R数据仅在行中传播

时间:2015-10-16 16:27:09

标签: r

我有一个包含数据的文件:

姓名:abcdef
价值:40个
编号:34
大小:1000

姓名:xyz
价值:4
编号:765
大小:5561000

姓名:qwerty
值:0
ID:4
大小:1000

但我会这样:

|名称|价值| Id |尺寸|
| ABCDEF | 40 | 34 | 1000 |
| XYZ | 4 | 765 | 5561000 |
| QWERTY | 0 | 4 | 1000 |

使用R标准命令可以做到这一点吗?

1 个答案:

答案 0 :(得分:3)

我在splitstackshape中找不到想象的功能,也无法在SO上找到重复的问题,我也想象我曾经看过使用“属性值”或“标签值”作为搜索词,但我可以提供解决方案基于scan处理多行数据的能力和sub删除多余文本的能力。您显然可以删除悬空列:

inp <- scan(text=txt, what=list("n", "v", "i", "s", "blank"),sep="\n")
Read 3 records
names(inp) <- lapply(inp , function(col) sub("\\:.+","",col[1]) )
inp <- data.frame( lapply(inp, function(col) sub(".+\\:[ ]{0,1}","",col) ) )
> inp
    Name Value  Id    Size c............
1 abcdef    40  34    1000              
2    xyz     4 765 5561000              
3 qwerty     0   4    1000     

这将要求数据非常规律。每个部分需要5行,并且值的一部分内的顺序必须是常量,尽管应该正确处理空白值。

使用的数据:

txt <- "Name: abcdef
Value:40
Id:34
Size: 1000

Name: xyz
Value:4
Id:765
Size: 5561000

Name: qwerty
Value:0
Id:4
Size: 1000
"