使用match(而非merge)从大型DataFrame填充列值
不使用merge匹配name列填充DataFrame的code列
你的代码问题点
你写的代码存在语法错误:最后一个括号误用了),应该改为];另外提取列的方式可以更简洁可靠。
修正后的可行代码
方式1:修正原代码的语法问题
df1$code <- df2[match(df1$name, df2$name), "id"]
或者用$直接提取列,可读性更强:
df1$code <- df2$id[match(df1$name, df2$name)]
方式2:命名向量映射(大规模数据更高效)
先把df2的name作为名称、id作为值生成命名向量,再直接匹配赋值:
# 构建name到id的映射向量 id_mapping <- setNames(df2$id, df2$name) # 填充df1的code列 df1$code <- id_mapping[df1$name]
最终效果
运行后df1的code列会被正确填充为对应id值:
> df1 name code 1 Player 3 3 2 Player 14 14 3 Player 16 16 4 Player 22 22 5 Player 43 43 6 Player 45 45
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

