全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1050 9
2017-02-07
比如我有两个数据框data如下:
id              time                      outcome      
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
......               ......                       ......
我想筛选出每个id中,时间最迟的那一行,也就是 每个id的最后一行。这用R如何做到呢?
我的代码是这样的:data %>%
                                  gourp_by(id) %>%
                                  filter(max(time))
运行结果报错,说time变量是factor,不能用max函数。还有其他方法么?

二维码

扫码加我 拉你入群

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

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

全部回复
2017-2-7 20:38:19
复制代码
二维码

扫码加我 拉你入群

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

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

2017-2-7 21:15:57
不懂不装懂 发表于 2017-2-7 20:38
谢谢!这个slice()函数好神奇!另外再请教一个问题:比如我有两个数据框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的数量不相等,我想将两个数据框合并,并且要删除data2中时间迟于data1中的行(针对每个id而言),也就是说,对于每一个id而言,data2中的事件都要发生在data1之前,发生在data1之后的数据不需要。那么我的思路是这样的:先在data1中筛选出,每个id最迟的那个时间,形成这样的data frame:
id    time1   outcome1
2    .......     ........
3    .......     .......
4    .......     .......
然后用merge与data2合并,比较time1和time2列,讲time2>time1的行都删除。可是问题来了,time1和time2都是factor,无法进行比较。那么我又将他们用as.POSIXLt()函数来转换,但是转换之后还是无法比较,这该怎么办呢?
二维码

扫码加我 拉你入群

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

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

2017-2-7 22:13:53
复制代码
二维码

扫码加我 拉你入群

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

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

2017-2-7 22:18:56
你可能是转换少了一个步骤,as.POSIXct(as.character(data$time))
二维码

扫码加我 拉你入群

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

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

2017-2-7 22:21:22
实际可以先筛选,再合并
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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