2014-01-23 46 views
1

我在R中有两个数据帧。第一个包含有关家庭的一些信息,另一个包含有关家庭 的所有儿童的一些信息的第一个,如:(HHchar数据帧)合并命令如何工作?

HHchar <- read.table(text="ID familysize 
1  4 
2  5 
3  2 
4  3",header=T) 

第二个喜欢的:(儿童的数据帧)

children <- read.table(text="ID age gender birthorder 
1  26  1 firstchild 
1  20  2 secondchild 
2  20  1 firstchild 
2  18  1 firstchild 
2  17  2 secondchild 
2  10  1 thirdchild 
3  19  1 firstchild 
3  12  2 secondchild 
4  10  1 firstchild",header=T) 

我想这是一个结果:

ID age gender  birthorder  familysize 
1  26  1  firstchild   4 
1  20  2  secondchild   4 
2  20  1  firstchild   5 
2  18  1  secondchild   5 
2  17  2  thirdchild   5 
3  19  1  firstchild   4 
3  12  2  secondchild   4 
4  10  1  firstchild   3 

对于这个结果我使用这个命令:

b2 <- merge (children ,HHchar,by="ID", all.x= TRUE) 

我想通过这个命令可以从HHchar数据框中提取关于在儿童数据框中报告的人的所有信息,并且将构建b2数据框。
但是发生了一些不好的事情,我发现b2中的行数并不是我所期望的。

例如:

  • 在HHchar我们有4个家族等4行
  • 在儿童的数据帧
  • 我们有9名儿童和9行
  • 在B2我预计9行,但它超越9

我测试这个问题的小数据集,但我的数据集非常大(853467行)。

所以我不能测试什么是错的? 合并命令是否适合我的需要?

+0

您可以使用以下方式访问功能文档:?merge。那里有例子。 [这是一个流行的问题,关于你需要更多类似于合并的方法](http://stackoverflow.com/questions/1299871/how-to-join-data-frames-in-r-inner-outer-left-对)。 – marbel

+0

我真的不明白你想要什么,例如在你想要的输出中,子数据框有一个缺失的行。但是如果你想在合并后得到一些结果,你可以使用'subset'。 (我认为合并工作正常,只是你没有想到这个结果。) – Llopis

+0

似乎你在结果中缺少一个ID = 2的行,这是故意的吗? “合并(孩子,HHchar)”是我理解你的问题所需要的。 –

回答

1

如果我明白你的问题正确的,这应该工作:

result <- merge(children, HHchar, by = "ID") 

一般来说,功能的工作原理为: 合并(firstDF,secondDF,by.x = ColumnToJoinOnInFirstDF,by.y = ColumnToJoinOnInSecondDF)

+0

没有合并命令不工作,因为我预计。并增加行数。我想通过这个命令可以将一些额外的行添加到数据集中。你有没有看到这个问题? – user3041372

+0

你能给出一个更具体的例子,可以用代码重现吗?你当前的例子也没有意义,因为你想要的输出只包含8行。 – so13eit

+0

这对我来说很好。除了原始问题中的输入可能是错误的。你有ID 2列出两个与firstchild和两个不同的年龄。这就是为什么这会产生9行而不是8行。 – JeremyS