【问题标题】:r programming: align two sequences of wordsr 编程:对齐两个单词序列
【发布时间】:2017-09-08 00:34:58
【问题描述】:

我想对齐两个大部分在一列上相交的数据集,但每个数据集都缺少一些行。例如:

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

因此,每个原始数据帧中的序列都保持不变;什么都没有被删除;词标记仍然是标记(它是语料库,而不是字典);真正发生的只是在缺少数据的地方插入了空格 (NA)。

【问题讨论】:

    标签: r string sequence


    【解决方案1】:
    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
    

    【讨论】:

    • 虽然没有保持顺序,但其中一只狗不见了......
    • 在真实数据集中,每一行都标有一个连续的 ID 号,我发现如果我按 df1 的 ID 对输出进行排序,那么来自 df2 的行的 ID 号不是单调排序的。这使我怀疑某些输出未对齐。我仍在努力理解这一点,但如果我无法修复它,那将是致命的(因为目的是从每个数据源正确收集每个令牌的数据)。 :|
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2018-04-20
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    相关资源
    最近更新 更多