2016-07-07 7 views
-1

私のデータフレームには、半構造化されたデータが列にあります。 「|」私が前に最初の単語だけを抽出したいこのdataframe$col1からR内の列を分割する

df 
col1 
a|b|c 
a b1|b|c 
a & b2|b|c 3 

私はこの

df$col2 <- unlist(strsplit(as.character(df$a),"[|]"))[[1]][1] 

を使用してみましたが、結果はすべての行の「A」の同じ値を持っていました。 これはどうしてこれを処理するのですか?

おかげ

+1

あなたの予想される出力は何ですか?おそらく 'ライブラリ(stringr); str_extract(df $ col1、[[:alnum:]] +(?= \\ |)") ' – akrun

+0

'ライブラリ(tidyr); – alistaire

+1

[列要素を3つの別個の列に分ける(R)]の重複可能性があります。df%>%分け(col1、into = 'col2'、sep = '\\ |'、余分= 'drop'、remove = FALSE) (http://stackoverflow.com/questions/25194174/separating-a-column-element-into-3-separate-columns-r) – alistaire

答えて

0

我々はあなたが唯一の最初のリストの場所を求めているだけの言葉

library(stringr) 
str_extract(df$col1, "[[:alnum:]]+(?=\\|)") 
#[1] "a" "b1" "b2" 
0

を抽出したい場合は最初の|

sub("[|].*", "", df$col1) 
#[1] "a"  "a b1" "a & b2" 

前の文字を抽出する必要がある場合最初のリストオブジェクトのRのリサイクルルールのため、文字は列の各行に対して繰り返されます。

t <- c("a|junk", "a b|junk", "a b1|junk") 
unlist(strsplit(as.character(t),"[|]"))[[1]][1] 
[1] "a" 

カラム分割の場合、私はsapply()と組み合わせてstrsplit()を使用します。これはHadley WickhamがすでにSOに投稿していたものでした。

df$col2 <- sapply(strsplit(as.character(df$a),"[|]"), "[", 1) 

https://stackoverflow.com/a/1355660/1146646