我對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.`
究竟是你期待在列通過處理文本來處理你的數據框,你能否提供你期望的樣例輸出,以便我可以嘗試提供幫助。 – Dinesh
謝謝!我現在編輯帖子給你一個想法。 – user6070714
XML :: readHTMLTable? 查看rvest軟件包以及? – chinsoon12