2017-07-07 17 views
0

私は文字列のベクトルを持っており、そこから情報を抽出したいと思います。文字列は、次のようになります。コロンとセミコロンで区切られた文字列からの抽出R

obs, product 
    1, apple:pink lady;grade 1 
    2, apple--pink lady 
    3, orange 

私は情報を抽出したいと、このように編成:

obs, product_1, product_2, product_3 
    1, apple, pink lady, grade 1 
    2, apple, pink lady, NA, 
    3, orange, NA, NA 

私はプログラミングに新しいですし、サブを(使用しようとしました「;。* $」、」 '、datasetname)は、新しいベクトルを返しますobs 1、私は製品1を得ることができます& 2 conbinedしたがって、私は新しい形成された文字列を分離するために別のラウンドを行う必要があります。しかし、obs 3(特殊文字、コロンまたはセミコロンなし)では、関数はすべてを返します。また、コロンやセミコロンの代わりに " - "のようにセパレータが異なる場合もあります。

Rでsqldfや他のパッケージを使用して私が望むものを得るにはどうすればいいですか? MAX(sapply(strsplit(DF1の$:

答えて

2

私たちは、あなたが `col.names`` col.names = paste0( "product_" とのダイナミックな引数、1を作ることができ、この

df2 <- cbind(df1[1], read.csv(text=gsub('[:;-]+', ',', df1$product), 
     header = FALSE, na.strings = "", col.names = paste0("product_", 1:3))) 

df2 
# obs product_1 product_2 product_3 
#1 1  apple pink lady grade 1 
#2 2  apple pink lady  <NA> 
#3 3 orange  <NA>  <NA> 
+1

を行うためにbase Rを使用することができますproduct: "[:; - ] +")、length))) ' – Benjamin

+0

これ以上説明できませんか?私はこれに新しいです。御時間ありがとうございます。 – Jin

+0

@Zuoすべての区切り文字を '、' gsub'に置き換え、 'product'カラムを' read.csv'で読み込んで3つのカラムを作成し、最初のカラムで 'cbind'を作成しました – akrun

関連する問題