2015-10-16 26 views
-1

我有這樣的數據的文件: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標準的命令?

+0

是。你有沒有嘗試過自己? – Heroka

+0

我似乎記得'splitstackshape'包中有讀取'attribute:value'數據的設施。 Paging @AnandaMahto –

回答

3

我無法在分裂堆棧中找到想象中的功能,也不能在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 
"