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

如何通过匹配QuestionId与AltQuestionId填充TakerId缺失值?

嘿,我来帮你搞定这个缺失值填充的需求!核心思路就是先从有完整AltQuestionId和AltTakerId的行里,建立起问题ID和答题者ID的对应映射,再用这个映射去匹配填充TakerId列。下面给你两种实用的方法:

方法1:用dplyr(tidyverse生态)实现

这种方法代码可读性强,适合习惯tidy风格的用户:

library(dplyr)

# 第一步:提取有效的问题ID-答题者ID映射关系
id_mapping <- df %>%
  filter(!is.na(AltQuestionId), !is.na(AltTakerId)) %>%
  select(QuestionId = AltQuestionId, TakerId_map = AltTakerId)

# 第二步:用映射表填充TakerId,coalesce会优先取非NA的匹配值
df_filled <- df %>%
  left_join(id_mapping, by = "QuestionId") %>%
  mutate(TakerId = coalesce(TakerId_map, TakerId)) %>%
  select(-TakerId_map)

# 查看最终结果
print(df_filled)

方法2:基础R原生实现(无需额外包)

如果不想加载第三方包,用基础R的match函数就能搞定:

# 先整理出无缺失的映射对
valid_matches <- na.omit(df[, c("AltQuestionId", "AltTakerId")])
colnames(valid_matches) <- c("Qid", "Tid")

# 用match找到每个QuestionId对应的TakerId,自动保留NA(无匹配的情况)
df$TakerId <- valid_matches$Tid[match(df$QuestionId, valid_matches$Qid)]

# 查看结果
print(df)

两种方法最终都会得到你期望的输出:比如第6行QuestionId=1会匹配到AltQuestionId=1对应的AltTakerId=7,把TakerId填为7;第9行QuestionId=6会匹配到AltQuestionId=6对应的AltTakerId=17,完美对应你的示例结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:11:16