2017-03-15 6 views
2

私は特定の列を連結したいデータフレームを持っています。重複するデータフレームなしで連結するr

私の問題は、これらの列のテキストに重複した情報が含まれているかどうかではないことです。私は関連する情報だけを保持するために複製を取り除きたいと思います。例えば

、私のようなデータフレームを持っていた場合:

Animal1   Animal2  Label 
1 cat dog   dolphin  19 
2 dog cat   cat   72 
3 pilchard 26  koala   26 
4 newt bat 81  bat   81 

あなたが行2に、「猫」は、両方の列「Animal1」と「Animal2」に含まれていることがわかります。行3では、番号26は列 'Animal1'と 'Label'の両方にあります。行4では、列 'Animal2'と 'Label'にある情報が既に 'Animal1'に順番に含まれています。

だから、ペースト機能を使って、私は列を連結することができます...

data1 <- paste(data$Animal1, data$Animal2, data$Label, sep = " ") 

しかし、私は重複を削除するために、まだ管理していません。

Output1 
1 cat dog dolphin 19 
2 dog cat cat 72 
3 pilchard 26 koala 26 
4 newt bat 81 bat 81 

行1は罰金ですが、上記のように他の行が重複して含まれています。私は取得しています出力は、ちょうど私の連結から当然です。

Iが望むであろう出力は次のとおり

Output1 
1 cat dog dolphin 19 
2 dog cat 72 
3 pilchard koala 26 
4 newt bat 81 

Iが連結後に重複を除去することを試みました。文字列内では、以下の例のようにすることができます(例:Removing duplicate words in a string in R)。私は単なる文字列を使用していたが、私は角括弧を参照エラー「予期しない記号」を受け取ったとして、私は列全体に適用できなかったとき

d <- unlist(strsplit(data1, split=" ")) 
paste(d[-which(duplicated(d))], collapse = ' ') 

これは私のために仕事をしました。

私はユニークな()関数もあることが分かりました。 Remove Duplicated String in a RowDeleting reversed duplicates with R

reduce_row = function(i) { 
    split = strsplit(i, split=", ")[[1]] 
    paste(unique(split), collapse = ", ") 
} 
data1$v2 = apply(data1, 1, reduce_row) 

私はこれらの例を使用しようとしましたが、まだ成功していません。

ご協力いただければ幸いです。

答えて

2

あなたがdata1 <- paste(data$Animal1, data$Animal2, data$Label, sep = " ")をやった後:感謝

data.frame(Output1 = vapply(strsplit(data1, " +"), function(x) paste(unique(x), collapse = " "), character(1))) 
#    Output1 
# 1 cat dog dolphin 19 
# 2   dog cat 72 
# 3 pilchard 26 koala 
# 4  newt bat 81 
+0

こんにちは、あなたの迅速な応答に感謝し、。 あなたのコードをコピーしましたが、エラーstrsplit(data1、 "+")にエラーが発生しました:文字以外の引数。 'data1 < - as.character(data1)'を追加してコードを実行しようとすると、次のように変わります。 'Output1' ' 1 c(1,2,4,3) ' –

+0

'data1 < - paste(data $ Animal1、data $ Animal2、data $ Label、sep =" ")'を実行した後、 'data1'を上書きしますか? –

+0

最初は、いいえ。私はエラーを受け取った後に試しましたが、それでも動作しませんでした。 –

関連する問題