楼主: lanhong1993
963 4

[问答] 求助!!如何进行数据合并? [推广有奖]

  • 1关注
  • 1粉丝

已卖:286份资源

博士生

54%

还不是VIP/贵宾

-

威望
0
论坛币
2701 个
通用积分
3.4261
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
12167 点
帖子
214
精华
0
在线时间
141 小时
注册时间
2016-11-1
最后登录
2024-3-26

楼主
lanhong1993 发表于 2017-2-8 14:56:59 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如我有两个数据框data1如下:
id          time1                        outcome1      
2     2016/02/03 14:23:00           78            
2     2016/02/03 15:24:00           89
2     2016/02/03 18:44:00           90
2     2016/02/04 08:23:00           77
2     2016/02/04 12:33:00           100
2     2016/02/05 09:12:00           108
2     2016/02/06 14:25:00           103
3     2016/03/12 13:26:00           100           
3     2016/03/12 15:35:00           99
3     2016/03/13 17:46:00           98
4     2016/03/03 16:23:00           109           
4     2016/03/03 19:55:00           95
4     2016/03/04 20:25:00           93
4     2016/03/04 14:23:00           87
4     2016/03/04 17:20:00           113
5     2016/02/08 14:23:00           106           
5     2016/02/08 15:24:00           80

...           ...                   ...           ...
数据框data2如下:
id          time2                         outcome2      
2     2016/02/03 15:28:00           1.3            
2     2016/02/03 15:40:00           1.8
2     2016/02/03 18:44:00           2.0
2     2016/02/04 08:23:00           2.1
3     2016/02/04 12:33:00           2.1
3     2016/02/05 09:12:00           1.2
3     2016/02/06 14:25:00           1.1
3     2016/03/12 13:26:00           0.9           
3     2016/03/12 15:35:00           1.4
3     2016/03/13 17:46:00           1.3
4     2016/03/03 16:23:00           1.8           
4     2016/03/03 19:55:00           2.3
4     2016/03/04 20:25:00           2.3
5     2016/03/04 14:23:00           1.2
5     2016/03/04 17:20:00           1.0
5     2016/02/08 14:23:00           2.6           
5     2016/02/08 15:24:00           2.2

...           ...                   ...           ...

其中,两个数据框中每个id的数量不相等,如何将两个数据框合并成如下形式呢?

id             time1              outcome1              time2               outcome2
2   2016/02/03 14:23:00     78       2016/02/03 15:28:00           1.3     
2   2016/02/03 15:24:00     89       2016/02/03 15:40:00           1.8
2   2016/02/03 18:44:00     90       2016/02/03 18:44:00           2.0
2   2016/02/04 08:23:00     77       2016/02/04 08:23:00           2.1
2   2016/02/04 12:33:00     100      NA                                        NA
2   2016/02/05 09:12:00     108      NA                                        NA
2   2016/02/06 14:25:00     103      NA                                        NA
3   2016/03/12 13:26:00     100      2016/02/04 12:33:00           2.1     
3   2016/03/12 15:35:00     99       2016/02/05 09:12:00           1.2
3   2016/03/13 17:46:00     98       2016/02/06 14:25:00           1.1
3   NA                                   NA       2016/03/12 13:26:00           0.9   
3   NA                                   NA       2016/03/12 15:35:00           1.4
3   NA                                   NA       2016/03/13 17:46:00           1.3
4   2016/03/03 16:23:00     109      2016/03/03 16:23:00           1.8      
4   2016/03/03 19:55:00     95       2016/03/03 19:55:00           2.3
4   2016/03/04 20:25:00     93       2016/03/04 20:25:00           2.3
4   2016/03/04 14:23:00     87        NA                                        NA
4   2016/03/04 17:20:00     113      NA                                        NA
5   2016/02/08 14:23:00     106      2016/03/04 14:23:00           1.2
5   2016/02/08 15:24:00     80        2016/03/04 17:20:00           1.0
5   NA                                   NA       2016/02/08 14:23:00           2.6   
5   NA                                   NA       2016/02/08 15:24:00           2.2

...           ...                   ...           ...




二维码

扫码加我 拉你入群

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

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

关键词:如何

沙发
BG4IMP 发表于 2017-2-9 22:14:52
现在的我只能用EXCEL表实现

VLOOKUP()函数的说。。。

藤椅
zhangyangsmith 发表于 2017-2-9 23:31:53
  1. data1seq <-
  2.          cbind(
  3.                data1,
  4.                data.frame( seq = do.call( "c", mapply( seq.int, with( data1, table(id) ) ) ) )
  5.            )
  6.    
  7.    data2seq <-
  8.          cbind(
  9.                data2,
  10.                data.frame( seq = do.call( "c", mapply( seq.int, with( data2, table(id) ) ) ) )
  11.                       )
  12.    
  13.    dfInter <- merge( data1seq, data2seq, all = TRUE )
  14.    dfRes <- dfInter[, -match( "seq", names(dfInter) )]
  15. dfRes
复制代码
What I understood is that you were asking for "cbind" type of operation instead of "merge" although the sequence of records should be retained. I just added a help column "seq" to keep the sequence of both datasets, which was then used as (one of) the merging variables.

已有 1 人评分论坛币 收起 理由
小朝 + 5 好的意见建议

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

板凳
小朝 发表于 2017-2-9 23:43:49
提供个思路,按id生成一个辅助列,data1为a3,data2为b3,这个辅助列不知道R怎么实现,希望有大神指导
data1
a1 a2 a3
2 81  1
2 23  2
2 32  3
3 45  1
3 32  2
data2
b1 b2 b3
2 23  1
2 43  2
3 34  1
  1. library(dplyr)
  2. data1 <- data.frame('a1'=c(2,2,2,3,3),'a2'=c(81,23,32,45,32),'a3'=c(1,2,3,1,2))
  3. data2 <- data.frame('b1'=c(2,2,3),'b2'=c(23,43,34),'b3'=c(1,2,1))
  4. full_join(data1,data2,by=c('a1'='b1','a3'='b3'))
复制代码

运行结果如下:
  a1 a2 a3 b2
1  2 81  1 23
2  2 23  2 43
3  2 32  3 NA
4  3 45  1 34
5  3 32  2 NA
借用楼上大神的代码
  1. library(dplyr)
  2. data1 <-
  3. data2 <-
  4. data1seq <- cbind(data1,data.frame( seq = do.call( "c", mapply( seq.int, with( data1, table(id))))))
  5. data2seq <- cbind(data2,data.frame( seq = do.call( "c", mapply( seq.int, with( data2, table(id))))))
  6. full_join(data1seq,data2seq,by=c('id','seq'))
复制代码


报纸
lanhong1993 发表于 2017-2-10 12:10:32
小朝 发表于 2017-2-9 23:43
提供个思路,按id生成一个辅助列,data1为a3,data2为b3,这个辅助列不知道R怎么实现,希望有大神指导
dat ...
恩恩,已经解决啦谢谢

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-22 03:24