r 编程 : align two sequences of words

标签 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

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

最佳答案

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

关于r 编程 : align two sequences of words,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46106939/

相关文章:

r - 世界地图 - 将国家的一半映射为不同的颜色

r - 来自成对比较 p 值的紧凑字母显示 (CLD)

r - 打开的设备太多

c - 使用 scanf 忽略分隔字符

python - 计算子组中缺失的实例

r - 为什么在 j 中调用 hist 时会打印直方图对象?

javascript - 如何将Set转换为带空格的字符串?

C++ 在读取 70,000 个文件时会随着时间变慢

python - 当我尝试在 keras 模型中嵌入序列数据时,如何解决 'could not convert string to float:' 错误

perl:如何从编号序列中创建紧凑的名称