2014-10-30 137 views
2

我有一列我想要變成數據框的字符串。我想根據一些固定長度分隔每個字符串,例如,假設我的名單看起來像:在R中按照固定長度分隔字符串以創建列

text = c("ABC  ABC BROWNIES COMPANY   1/31/2009", 
     "BCD  BCD BROWNIES COMPANY   1/31/2009") 

,我希望把它變成數據框,會導致如果我使用:

FINAL <- data.frame(rbind(c("ABC", "ABC BROWNIES COMPANY","1/31/2009"),c("BCD", "BCD BROWNIES COMPANY","1/31/2009")),stringsAsFactors = F) 

colnames(FINAL) = c("Ticker","Company","Date") 

FINAL

基本上我想介紹某種固定長度定界的在的每個元件分離的項目「文本」。 我不認爲我可以使用strsplit,因爲我真的沒有一個字符需要拆分(空格將不起作用,因爲我的一些條目包含空格,並且從「Ticker」到「Company」和「公司」到「日期」)。

任何幫助將不勝感激!

回答

3

既然你提到了固定長度的分隔,也許給read.fwf一試。

read.fwf(textConnection(text), widths = c(3, 21, 13), 
     col.names = c("Ticker", "Company", "Date")) 
# Ticker    Company  Date 
# 1 ABC ABC BROWNIES COMPANY 1/31/2009 
# 2 BCD BCD BROWNIES COMPANY 1/31/2009 

你可以用中間的21值來讓它在所有的數據上工作。

另一種可能性是在三個或更多空間上分割。

data.frame(do.call(rbind, strsplit(text, " {3,}"))) 
# X1     X2  X3 
# 1 ABC ABC BROWNIES COMPANY 1/31/2009 
# 2 BCD BCD BROWNIES COMPANY 1/31/2009 
+0

非常感謝大家的投入!我將與read.fwf一起去,因爲有時在我的數據中列只會被一個空格分隔 - 但是這很好,我學到了很多新東西=) – ZZ123 2014-10-31 12:59:41

1

請使用read.fwf或用分隔符替換長跨距的空格。

> read.table(text=gsub(" {3,10}", ",", text), sep=",") 
    V1     V2   V3 
1 ABC ABC BROWNIES COMPANY 1/31/2009 
2 BCD BCD BROWNIES COMPANY 1/31/2009 
+0

謝謝你,read.fwf會訣竅! – ZZ123 2014-10-31 13:01:07

+0

爲了正確地玩SO遊戲,你現在需要給Richard一個複選標記 – 2014-10-31 18:28:06

0

可能str_split_fixedstringr

library(stringr) 
## 
Df <- data.frame(
    str_split_fixed(text,pattern="\\s{2,}",3), 
    stringsAsFactors=F) 
## 
names(Df) <- c("Ticker","Company","Date") 
## 
> Df 
    Ticker    Company  Date 
1 ABC ABC BROWNIES COMPANY 1/31/2009 
2 BCD BCD BROWNIES COMPANY 1/31/2009 
> str(Df) 
'data.frame': 2 obs. of 3 variables: 
$ Ticker : chr "ABC" "BCD" 
$ Company: chr "ABC BROWNIES COMPANY" "BCD BROWNIES COMPANY" 
$ Date : chr "1/31/2009" "1/31/2009" 

其中假定2個或更多連續的空格表示新的一列;儘管如有必要可以對此進行調整。

+0

[「string ** i **」](https://github.com/Rexamine/stringi)的更新版本有一個'simplify'參數,它可以讓你執行以下操作:'stri_split_regex(text,「\\ s {3,}」,simplify = TRUE)'。 – A5C1D2H2I1M1N2O1R2T1 2014-10-31 10:48:25

+0

非常感謝!我只是下載了stringr,我沒有意識到它可以做很多事情! – ZZ123 2014-10-31 13:01:56

相關問題