合并具有不平等观察的数据集

时间:2014-01-09 10:02:02

标签: r merge dataframe

我有两个数据集,一个是另一个数据集的子集,但子集有附加列,观察次数较少。

基本上,我有一个唯一的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

感谢。

3 个答案:

答案 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