我有两个数据集,一个是另一个数据集的子集,但子集有附加列,观察次数较少。
基本上,我有一个唯一的ID分配给每个参与者,然后是一个HHID,他们被招募的房屋ID(例如从11个房屋招募的15个参与者)。
> Healthdata <- data.frame(ID = gl(15, 1), HHID = c(1,2,2,3,4,5,5,5,6,6,7,8,9,10,11))
> Healthdata
现在,我有一个数据子集,每个家庭只有一个参与者,选择谁花更长时间看电视。在这个子集数据中,我计算了每个房屋的社会经济评分(SSE)。
> set.seed(1)
> Healthdata.1<- data.frame(ID=sample(1:15,11, replace=F), HHID=gl(11,1), SSE = sample(-6.5:3.5, 11, replace=TRUE))
> Healthdata.1
现在,我想将子集(Healthdata.1)中的SSE分配给更大数据(Healthdata)的唯一参与者,以便来自同一家的参与者获得相同的分数。
我不能简单地合并这个,因为数据集具有不同的观察数量,在较大的一个中只有15个,但在子集中只有11个。
在R中有没有办法做到这一点?我很陌生,我坚持这个。
我希望所需的输出如下所示,即来自同一HHID(房屋)的ID(参与者)应具有相同的SSE分数。以下输出仅用于我需要的示例,上面的种子不会给出相同的输出。
ID HHID SSE
1 1 -6.5
2 2 -5.5
3 2 -5.5
4 3 3.3
5 4 3.0
6 5 2.58
7 5 2.58
8 5 2.58
9 6 -3.05
10 6 -3.05
11 7 -1.2
12 8 2.5
13 9 1.89
14 10 1.88
15 11 -3.02
感谢。
答案 0 :(得分:2)
您可以使用merge
,默认情况下,它会按列交叉点合并。
merge(Healthdata,Healthdata.1,all.x=TRUE)
ID HHID SSE
1 1 1 NA
2 2 2 NA
3 3 2 NA
4 4 3 NA
5 5 4 NA
6 6 5 NA
7 7 5 NA
8 8 5 NA
9 9 6 0.7
10 10 6 NA
11 11 7 NA
12 12 8 NA
13 13 9 NA
14 14 10 NA
15 15 11 NA
或者您可以选择合并的列:
merge(Healthdata,Healthdata.1,all.x=TRUE,by='ID')
答案 1 :(得分:0)
library(plyr)
join(Healthdata, Healthdata.1)
# Inner Join
join(Healthdata, Healthdata.1, type = "inner", by = "ID")
# Left Join
# I believe this is what you are after
join(Healthdata, Healthdata.1, type = "left", by = "ID")
答案 2 :(得分:0)
您需要按HHID
合并,而不是ID
合并。请注意,这有点令人困惑,因为来自超级组的ID来自与子组不同的集合。即ID.x == 4!= ID.y == 4(事实上,在这种情况下,他们在不同的家庭)。因此我在这里留下了两个ID列以避免歧义,但您可以轻松地将结果子集化以仅显示ID.x,
> merge(Healthdata, Healthdata.1, by='HHID')
HHID ID.x ID.y SSE
1 1 1 4 -5.5
2 2 2 6 0.5
3 2 3 6 0.5
4 3 4 8 -2.5
5 4 5 11 1.5
6 5 6 3 -1.5
7 5 7 3 -1.5
8 5 8 3 -1.5
9 6 9 9 0.5
10 6 10 9 0.5
11 7 11 10 3.5
12 8 12 14 -2.5
13 9 13 5 1.5
14 10 14 1 3.5
15 11 15 2 -4.5