如何基于来自更大数据集样本的ID变量添加新变量?
R数据集左连接实现方法
你需要的是保留df所有行,同时匹配g中对应ID的SSE值,不匹配的填充NA,这是典型的左连接操作,用以下方法可以实现:
方法一:Base R 的 merge() 函数
直接使用merge函数,设置all.x = TRUE来保留左数据框(df)的所有行:
df = data.frame(ID = 1:10, Num = 101:110) g = data.frame(ID = 1:5, SSE = 1:5) merge(df, g, by = "ID", all.x = TRUE)
参数说明:
by = "ID":指定按ID列进行匹配all.x = TRUE:强制保留df的所有观测,匹配不到g中对应行时,SSE列自动填充NA
方法二:dplyr 包的 left_join() 函数
如果习惯用tidyverse工具链,dplyr的left_join()更直观,天生就是左连接逻辑:
library(dplyr) df = data.frame(ID = 1:10, Num = 101:110) g = data.frame(ID = 1:5, SSE = 1:5) left_join(df, g, by = "ID")
left_join()默认保留第一个输入数据框(df)的所有行,自动匹配第二个数据框(g)的对应列,不匹配的位置填充NA。
为什么%in%没成功?
%in%只是用来判断向量元素是否存在于另一个向量中,返回的是逻辑值,没法直接完成这种"匹配并添加列"的合并操作,需要用专门的合并函数来实现需求。
内容的提问来源于stack exchange,提问作者An116
相关产品推荐
相关产品推荐

