2017-09-08 4 views
3

ほとんどの場合、1つの列に交差する2つのデータセットを整列したいが、各データセットにはいくつかの行が欠けている。例:rプログラミング:単語の2つのシーケンスを整列する

df1 <- data.frame(word = c("my", "dog", "ran", "with", "your", "dog"), 
        freq = c(5, 2, 2, 6, 5, 10)) 
df2 <- data.frame(word = c("my", "brown", "dog", "ran", "your", "dog"), 
        pos = c("a", "b", "c", "d", "a", "e")) 

アウトプットとして欠落している箇所があればどこでも挿入したいと思っています。したがって、出力では、df1の新しい形式はdf1がdf2にあった単語一致を欠いていて、df2の新しい形式はdf2にdf1にあった単語インスタンスがないNAsを持つNAsを持つことになります。

私の例のように、配列の問題と要素は繰り返されます。 (これは一般的な "マージ"の状況ではありません)。私はDTWが解決策になると思っていますが、わかりません。現在の目的では、正確な一致のみが一致することを明記することは公正です。

上記ケースのための所望の出力は、これらの列を有するデータフレームのようになります。

$word1 my NA dog ran with your dog 
$freq 5 NA 2 2 6 5 2 
$word2 my brown dog ran NA your dog 
$pos a b c d NA a c 

したがって、各オリジナルデータフレームのシーケンスが維持されています。何も削除されません。単語トークンはトークンのままです(これはコーパスであり、辞書ではありません)。実際に起こったことは、データがないところにスペース(NAs)が挿入されていることです。

答えて

2
df1$count = ave(seq_along(df1$word), df1$word, FUN = seq_along) 
df2$count = ave(seq_along(df2$word), df2$word, FUN = seq_along) 
df1$merge = paste(df1$count, df1$word) 
df2$merge = paste(df2$count, df2$word) 
output = merge(x = df1, y = df2, by = "merge", all.x = TRUE, all.y = TRUE) 
output[c(2, 3, 5, 6)] 
# word.x freq word.y pos 
#1 <NA> NA brown b 
#2 dog 2 dog c 
#3  my 5  my a 
#4 ran 2 ran d 
#5 with 6 <NA> <NA> 
#6 your 5 your a 
#7 dog 2 dog c 
+0

シーケンスはいえ維持されていない、と犬の一つは、各行が連続したID番号でタグ付けされた実際のデータセットで... –

+0

が欠落している、と私は私がすることによって出力をソートした場合ことを発見していますdf1のIDであれば、df2からの行のID番号は単調に並べられません。これにより、出力の一部がずれている可能性があります。私はまだこれを理解するために取り組んでいますが、修復できない場合は致命的です(目的は各データソースから各トークンのデータを正しく収集するためです)。 :| –

関連する問題