2016-03-31 122 views
2

我對R來說比較新,所以請對我輕鬆一點。R - 將多個值的列行分割爲數據幀

我正在試圖弄清楚自己。

我有一個巨大的文本塊,我從網站上刮過。它看起來像這樣(我爲了隱私的緣故修改了一些信息):

> theText99 

499737 2016-03-31 10:37:29 00:00:32 SALES WORD INITIATIVE 160915 123456789101 
Person Name Completed\n499731 2016-03-31 10:36:50 00:13:50 SALES NON WORD 
INITIATIVE 160915 1234567891013 Woman Name Completed\n499726 2016-03-31 
10:36:29 00:07:57 SALES NON WORD INITIATIVE 160915 123456789101 Someone Berry 
Completed\n499672 2016-03-31 10:29:13 00:00:09 SALES WORD INITIATIVE 160915 
123456789101 Person Carr Completed\n499654 2016-03-31 10:27:16 00:00:09 SALES 
WORD INITIATIVE 160915 123456789101 Person Carr Completed\n499609 2016-03-31 
10:18:36 00:11:06 SALES WORD INITIATIVE 160915 123456789101 Person Carr 
Completed\n499601 2016-03-31 10:16:29 00:10:34 SALES WORD INITIATIVE 160915 
123456789101 FirstName Kang Completed\n499568 2016-03-31 10:10:39 00:02:31 
SALES NON WORD INITIATIVE 160915 123456789101 Person Carr Completed\n499548 
2016-03-31 10:06:40 00:07:15 SALES WORD INITIATIVE 160915 1234567891011 Pat 
Laugh Completed\n499508 2016-03-31 09:56:34 00:02:51 SALES WORD INITIATIVE 
160915 123456789101 Mark LastName Completed\n499499 2016-03-31 09:54:33 
00:00:08 SALES WORD INITIATIVE 160915 123456789101 Woman Name 
Completed\n499490 2016-03-31 09:53:04 00:04:28 SALES WORD INITIATIVE 160915 
123456789101 Person Name Completed 

我的目標是將這些數據解析到數據框中。

我已經完成了這麼多:

> library(stringr) 
> t <- str_split(theText99, "\\n") 

導致一組漂亮的行文本的..

[1] "499737 2016-03-31 10:37:29 00:00:32 SALES THING INITIATIVE 160915 123456789101 First Name Completed"
[2] "499731 2016-03-31 10:36:50 00:13:50 SALES THINGY INITIATIVE 160915 123456789101 Chelsea Hello Completed"
[3] "499726 2016-03-31 10:36:29 00:07:57 SALES THINGY INITIATIVE 160915 123456789101 Nice Name Completed"

把它放進一個數據幀的思維我得到的地方:

> x <- as.data.frame(t) 
> t <- x[1,] # To Test on the first row 
> library(stringi) 
> library(stringr) 
> t <- as.character(t) 
> callId <- str_extract(t, "^[0-9]{6}") 
> callId 
[1] "499737" 
> callDate <- str_extract(t, "[0-9\\-]{10}") 
> callDate 
[1] "2016-03-31" 
> callDuration <- str_extract(t, "[0-9\\:?]{8}") 
> callDuration 
[1] "10:37:29" 
> callInitiative <- str_extract(t, "([A-Z]...+[A-Z]+...[0-9]+)") 
> callInitiative 
[1] "SALES BLAHBLAH INITIATIVE 160915" 
> phoneNumber <- str_extract(t, "(\\d){7,}") 
> phoneNumber 
[1] 123456789101 
> agentName <- str_extract(t, "([A-Z][a-z]+ [A-Z][a-z]+)") 
> agentName 
> FirstName LastName 

誰知道這段代碼是否會阻止... Th一些變量的長度經常變化。

我的問題 文本的最後一個大的,在每一行,變化頻繁:

例如: [3]「499726 2016年3月31日10點36分29秒0時07分57秒SALES啄倡議160915 123456789101尼斯名稱完成

[3] 」499726 2016年3月31日10時36分二十九秒0時07分57秒SALES啄倡議160915 123456789101尼斯名稱尚待決定

[3]「499726 2016年3月31日10時36分29秒0點07分57秒銷售啄倡議160915 123456789101好聽的名字尋找的東西的另一個來源」

什麼是分裂的最佳方式所有這些信息?

我想我可能會做太多的工作分裂字符串......這是一個更好的方法嗎?

大多數項目會保持相對的長度相同:

499726 - 6號 2016年3月31日 - 相同的日期格式 10點36分29秒 - 同時格式 00: 07:57 - 同時格式 銷售啄倡議160915 - 這會改變,但它的所有文本與多家末 123456789101 - 電話號碼,保持相同長度 好名字 - 人名。名字,姓氏 已完成 - 此欄位更改。從1個字到5個字。

任何意見將大大讚賞。

謝謝!

編輯

我正在尋找的信息進入列,例如:

示例串: 499726 2016年3月31日10時36分29秒0時07分57秒SALES啄倡議160915 123456789101好聽的名字已完成

列:

df <- data.frame(callID = 499726, 
callDate = "2016-03-31", 
callTime = "10:36:29", 
callDuration = "00:07:57", 
callInitiative = "SALES THINGY INITIATIVE 160915", 
phoneNumber = "123456789101", 
agentName = "Nice Name", 
callStatus = "Completed") 
## REemember, the data in this column could be anything from 'completed' to 
## Awaiting More Info' to 'Call Back Tomorrow' to 'Is Unaware of Anything 
## We're Saying' (etc)...From a string splitting perspective, this is 
## the last one that's giving me issues.` 
+0

究竟是你期待在列通過處理文本來處理你的數據框,你能否提供你期望的樣例輸出,以便我可以嘗試提供幫助。 – Dinesh

+0

謝謝!我現在編輯帖子給你一個想法。 – user6070714

+0

XML :: readHTMLTable? 查看rvest軟件包以及? – chinsoon12

回答

0

解決

X < - str_locate(T,AGENTNAME) callStatus < - SUBSTR(T,(X [2] +2),NCHAR(T))