You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr合并跨语言数据集时出现重复行问题求助

解决dplyr合并数据集时的重复行问题

问题根源分析

你遇到的重复行问题,核心原因是仅用speaker作为连接键时,这个键在两个数据集中都不是唯一标识。比如df.fr里speaker=1有3行,df.en里speaker=1也有3行,当执行left_join(df.en)时,每个speaker=1的法语行都会和所有speaker=1的英语行交叉匹配,最终产生3×3=9行重复数据,这显然不是你想要的一一对应关系。

正确的合并步骤

因为你的数据中,同一个说话人下的法、英单词是按顺序一一对应的(比如un对应one,deux对应two),我们需要添加一个分组内的行号作为额外连接键,确保每行单词能精准匹配。

步骤1:给数据集添加分组行号

先给df.fr和df.en分别添加同一说话人内的行序号,用来标记单词的对应位置:

library(dplyr)

# 处理法语数据集,添加分组行号
df.fr <- df.fr %>%
  group_by(speaker) %>%
  mutate(row_id = row_number()) %>%
  ungroup()

# 处理英语数据集,添加分组行号
df.en <- df.en %>%
  group_by(speaker) %>%
  mutate(row_id = row_number()) %>%
  ungroup()

步骤2:合并法、英数据集

现在用speaker+row_id作为连接键,就能保证每行单词正确匹配:

# 合并法、英数据集
combined_lang <- df.fr %>%
  left_join(df.en, by = c("speaker", "row_id"))

步骤3:合并类型数据集

最后和df.type按English合并(你提到每个单词在词典中仅出现一次,所以这一步不会产生重复):

# 合并类型信息并清理临时列
new.df <- combined_lang %>%
  left_join(df.type, by = "English") %>%
  select(-row_id)

最终结果

执行上述代码后,你会得到期望的结果:

print(new.df)
#   speaker French English    type
# 1       1     un     one  number
# 2       1   deux     two  number
# 3       1  trois   three  number
# 4       4  chien     dog animal

内容的提问来源于stack exchange,提问作者Catherine Laing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:03:49