楼主: Davidhust
8607 23

[问答] 用R合并数据 [推广有奖]

讲师

66%

还不是VIP/贵宾

-

威望
0
论坛币
614 个
通用积分
10.3323
学术水平
16 点
热心指数
16 点
信用等级
15 点
经验
18556 点
帖子
490
精华
0
在线时间
619 小时
注册时间
2009-10-6
最后登录
2025-11-11

楼主
Davidhust 发表于 2011-9-2 17:34:30 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

下面有两组数据:x和y

> x <- data.frame(id=c("A","B","C","D","E"),height=c(155,165,175,176,180), stringsAsFactors = F);x
id height
1 A 155
2 B 165
3 C 175
4 D 176
5 E 180
> y <- data.frame(id=c("D","B","C","A","F"),weight=c(52,65,68,72,80), stringsAsFactors = F)
> y
id weight
1 D 52
2 B 65
3 C 68
4 A 72
5 F 80

我想将两个表根据id合并一起,但以x为主表,y为附表,然后合并后效果是这样子
id height weight
1 A 155 72
2 B 165 65
3 C 175 68
4 D 176 52
5 E 180 NA

请问该怎么做?谢谢~


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:合并数据 Weight Eight weigh wei

沙发
ryusukekenji 发表于 2011-9-2 20:13:36
  1. > merge(x,y,all=TRUE)
  2.   id height weight
  3. 1  A    155     72
  4. 2  B    165     65
  5. 3  C    175     68
  6. 4  D    176     52
  7. 5  E    180     NA
  8. 6  F     NA     80
复制代码
已有 1 人评分论坛币 收起 理由
yahoocom + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

藤椅
jcwang 发表于 2011-9-11 19:59:21
ryusukekenji 发表于 2011-9-2 20:13
merge(x,y,id=id,all.x=T)
已有 2 人评分经验 论坛币 收起 理由
李会超 + 20 热心帮助其他会员
yahoocom + 20 热心帮助其他会员

总评分: 经验 + 20  论坛币 + 20   查看全部评分

板凳
Davidhust 发表于 2011-9-14 16:59:10
jcwang 发表于 2011-9-11 19:59
merge(x,y,id=id,all.x=T)
谢谢,您看这样写可以么:
merge(x,y,all.x=T,by="id")

报纸
wlgyyk 发表于 2011-9-16 00:10:00
Davidhust 发表于 2011-9-14 16:59
谢谢,您看这样写可以么:
merge(x,y,all.x=T,by="id")
可以这样写,效果一样

地板
haiyu819 发表于 2011-9-16 16:15:41
学习了~~~~

7
Davidhust 发表于 2011-9-16 17:32:41
wlgyyk 发表于 2011-9-16 00:10
可以这样写,效果一样
我最近用这条命令合并两份数据,a样本有70万个case,b样本有58万个case,按说用all.x=T和by="id",结果应该跟a一样,有70万个case才对,可实际上却是跟b的一样,58万个,而当我用all=T的时候,结果却是70万个case了,不知怎么回事

8
wlgyyk 发表于 2011-9-17 05:22:49
Davidhust 发表于 2011-9-16 17:32
我最近用这条命令合并两份数据,a样本有70万个case,b样本有58万个case,按说用all.x=T和by="id",结果应该 ...
奇怪,我换了个例子试了试,没有问题啊~
> a <- data.frame(x=1:1300,y=rep(letters,50))
> b <- data.frame(x=1:1040,z=rep(LETTERS,40))
> c <- merge(a,b,all.x=T,by="x")
> dim(c)[1]
> 1300
跟dim(a)[1]的结果一样。lz确定没有把x,y弄反?

9
Davidhust 发表于 2011-9-20 14:32:09
wlgyyk 发表于 2011-9-17 05:22
奇怪,我换了个例子试了试,没有问题啊~
> a  b  c  dim(c)[1]
> 1300
我这边好像依然有问题。老兄方便给QQ或者邮箱?我把我的数据和语句发给您,您看看是什么问题

10
tobewithU 发表于 2011-9-21 01:08:11
学习了啊,多谢

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 09:26