r编程:对齐两个单词序列

时间:2017-09-08 00:34:59

标签: r string sequence

我想对齐两个主要在一列上相交的数据集 - 但每个数据集都缺少一些行。例如:

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的新形式将具有NA,其中df1缺少df2中的单词匹配,并且df2的新形式将具有NA,其中df2缺少df1中的单词实例。

在我的例子中,序列很重要,元素也重复。 (所以这不是一个通用的“合并”情况。)我怀疑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)。

1 个答案:

答案 0 :(得分: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