按 ID 匹配两个数据集之间的观察结果

Match observations between two datasets by ID

我正在处理以下数据:http://people.stern.nyu.edu/wgreene/Econometrics/healthcare.csv

我想做的是训练我的算法来正确预测一个人是否会在随后的时期辍学。

data1 <- subset(data, YEAR==1984)

data2 <- subset(data, YEAR==1985)

didtheydrop <- as.integer(data1$id)

didtheydrop <- lapply(didtheydrop, function(x) as.integer(ifelse(x==data2$id, 0, 1)))

这创建了一个大列表,其中包含我认为我想要的值,但我不确定。最后,我想将这个变量附加到 1984 年的数据,然后用它来创建我的模型。

我该怎么做才能确保比较适当的值?列表长度不一样,而且它们出现的顺序也不正确(即受访者 3 - 7 没有在 1984 年做出回应,但他们出现在 1985 年)

假设 data1 和 data2 是两个数据帧(不清楚,因为您似乎是从一个名为 data 的原始较大的单个数据帧中提取它们),我认为最好合并它们并使用单个数据帧。也就是说,如果有一个较大的数据框,不要对其进行子集化,只需删除不需要的列即可;如果 data1 和 data2 是两个数据帧,则合并它们并仅使用一个数据帧。

在 R 中有多种方法可以做到这一点。

您应该查看控制台中调用 ?merge 的合并函数并阅读函数说明。

本质上,要合并两个数据帧,您应该这样做:

merge(data1, data2, by= columnID) #Where columnID is the name of the variable that identifies the ID. If it is different in data1 and data2 you can use by.x and by.y

然后你必须定义是否要使用参数 all.x、all.y 和 all 合并两个表中的所有行:来自 data1 的所有值,即使在 data2 中找不到匹配项,或 data2 中的所有值,即使在 data1 中未找到匹配项,或所有值,无论其他数据库中是否存在匹配 ID。

Merge 在任何 R 安装的基础包中。

你也可以使用 dplyr 包,这使得连接的类型更加明确:

inner_join(data1, data2, by = "ID") left_join(data1, data2, by = "ID") right_join(data1, data2, by = "ID") full_join(data1, data2, by = "ID")

这对 dplyr join https://rpubs.com/williamsurles/293454

很好 link

希望对您有所帮助