2016-09-24 8 views
0

"Collector"という名前の列にデータフレーム(data3)があります。この列には英数字があります。たとえば、「Ruiz and Galvis 650」と入力します。文字列からすべての単語を抽出し、結果を含む列を作成します

INPUT:私は別に、アルファ文字と数字を抽出し、すべての単語(COL)を持つ2つの新しい列、その文字列の番号を使用して、1つ(たcolid)と別のものを作成する必要が

Collector      Times  Sample 
Ruiz and Galvis 650    9   SP.1    
Smith et al 469     8   SP.1 

期待される出力

Collector      Times  Sample  ColID Col 
Ruiz and Galvis 650    9   SP.1  650  Ruiz and Galvis 
Smith et al 469     8   SP.1  469  Smith et al 

私は次のことを試してみましたが、私は、ファイルを保存しようとすると、私はエラー(.External2でエラーが発生しました(C_writetable、X、ファイル、nrow(x)は、P、rnamesを取得し、 sep、eol、: 'EncodeElement'の 'list'が実装されていません):

regexp <- "[[:digit:]]+" 
data3$colID<- NA 
data3$colID <- str_extract (data3$Collector, regexp) 

data3$Col<- NA 
regexp <-"[[:alpha:]]+" 
data3$Col <- (str_extract_all (data3$Collector, regexp)) 
write.table(data3, file = paste("borrar2",".csv", sep=""), quote=T, sep = ",", row.names = F) 

答えて

2

問題は、str_extract_allは単一の文字列ではなく複数のリストを見つけることです。例:

> dput(str_extract_all("Ruiz and Galvis 650", "[[:alpha:]]+")) 
list(c("Ruiz", "and", "Galvis")) 

ネストされた要素を持つデータフレーム(上記)は、明らかにファイルに保存できません。しかし、あなたは、スペースなどの文字にマッチする正規表現パターンを更新する場合は、あなたが戻って代わりstr_extractを使用することに行くことができます

> dput(str_extract("Ruiz and Galvis 650", "[[:alpha:] ]+")) 
"Ruiz and Galvis " 

は、第二の正規表現でスペースに注意してください。これは、すべての文字/スペースを1つの文字列として照合し、data.frameをファイルに書き込むことを許可します。

+0

私の問題を解決しました。どうもありがとう! –

0

あなたの例として、均一で、これは別のオプションであることを示しているとして、あなたのデータがある場合:

library(stringi) 
library(purrr) 
library(dplyr) 

df <- data.frame(Collector=c("Ruiz and Galvis 650", "Smith et al 469"), 
       Times=c(9, 8), 
       Sample=c("SP.1", "SP.1"), 
       stringsAsFactors=FALSE) 

stri_match_first(df$Collector, regex="([[:alpha:][:space:]]+) ([[:digit:]]+)") %>% 
    as.data.frame(stringsAsFactors=FALSE) %>% 
    select(Col=V2, ColID=V3) %>% 
    bind_cols(df) %>% 
    select(-Collector) 
##    Col ColID Times Sample 
## 1 Ruiz and Galvis 650  9 SP.1 
## 2  Smith et al 469  8 SP.1 
+0

ありがとう!あなたの答えは、この話題についてもう少し考えました。 –

関連する問題