全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
944 6
2017-02-06
比如我有两个数据框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/04 15:40:00           1.8
2     2016/02/05 18:44:00           2.0
2     2016/02/07 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/14 11:34: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的数量不相等,时间也不一样。如何将两个数据框合并呢?并且要删除data2中时间迟于data1中的行(针对每个id而言),也就是说,对于每一个id而言,data2中的事件都要发生在data1之前,发生在打他1之后的数据不需要。这在R中该如何实现呢?

二维码

扫码加我 拉你入群

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

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

全部回复
2017-2-7 11:11:52
先在data1中找出,每个id最早的1个时间,
形成这样的data.frame:
id  time1 outcome1
2   ……      ……
3  ……      ……
4 ……       ……
然后用merge与data2合并,比较time1与time2列,将time2>time1的时间保留就Ok了
二维码

扫码加我 拉你入群

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

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

2017-2-7 19:35:06
jiangbeilu 发表于 2017-2-7 11:11
先在data1中找出,每个id最早的1个时间,
形成这样的data.frame:
id  time1 outcome1
time1和time2之间怎么比较呢?运行提示time1和time2是factor,两者之间用比较运算符比较没有意义。可以将time通过as.numeric()函数转化成数值型再进行比较么?但是这样的话,原本的yy-mm-dd hh:mm:ss的格式就变成了毫无意义的整数格式了,这可怎么办?
二维码

扫码加我 拉你入群

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

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

2017-2-7 19:38:00
lanhong1993 发表于 2017-2-7 19:35
time1和time2之间怎么比较呢?运行提示time1和time2是factor,两者之间用比较运算符比较没有意义。可以将 ...
把这个factor变成时间格式的就可以比较了哈
二维码

扫码加我 拉你入群

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

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

2017-2-7 19:57:00
jiangbeilu 发表于 2017-2-7 19:38
把这个factor变成时间格式的就可以比较了哈
可是转换成时间格式后,日期就只剩下年月日,时分秒就没有了呀?
二维码

扫码加我 拉你入群

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

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

2017-2-7 20:01:22
jiangbeilu 发表于 2017-2-7 19:38
把这个factor变成时间格式的就可以比较了哈
知道了,用as.POSIXlt()函数就可以啦!!
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群