R 基于另一个变量的最小值(基于另一个变量组)提取值
我知道我的标题可能没有意义,所以让我解释一下。我有一个数据框,里面有大约3000个观察值和多个列。下面给出一个例子R 基于另一个变量的最小值(基于另一个变量组)提取值,r,R,我知道我的标题可能没有意义,所以让我解释一下。我有一个数据框,里面有大约3000个观察值和多个列。下面给出一个例子 ID T1 T2 1 00:00:04 00:09:00 1 00:05:00 01:00:59 2 00:39:00 05:23:00 2 00:23:52 06:12:31 2 00:40:50 00:00:01 3 01:05:01 00:32:00 ID T1 T2 EarliestT2Time 1
ID T1 T2
1 00:00:04 00:09:00
1 00:05:00 01:00:59
2 00:39:00 05:23:00
2 00:23:52 06:12:31
2 00:40:50 00:00:01
3 01:05:01 00:32:00
ID T1 T2 EarliestT2Time
1 00:00:04 00:09:00 00:09:00
2 00:40:50 00:00:01 00:00:01
3 01:05:01 00:32:00 00:32:00
有几个步骤我想做,但如果有一个代码,可以一次完成所有这一切,这将是伟大的。首先,我想按ID分组,找出T2的最短时间。我希望在T2旁边的一个新列中输入此内容。这一部分很好,我使用的代码如下:
EarliestT2Time<-ddply(DataFirst, "ID", summarize, min=min(T2))
DataFirst$EarliestT2Time<-EarliestT2Time[,2]
ID T1 T2 EarliestT2Time
1 00:00:04 00:09:00 00:09:00
1 00:05:00 01:00:59 00:09:00
2 00:39:00 05:23:00 00:00:01
2 00:23:52 06:12:31 00:00:01
2 00:40:50 00:00:01 00:00:01
3 01:05:01 00:32:00 00:32:00
接下来我想按ID分组,每个ID只包含一行,其中T1在对应的T2最小值中。因此,数据帧如下所示
ID T1 T2
1 00:00:04 00:09:00
1 00:05:00 01:00:59
2 00:39:00 05:23:00
2 00:23:52 06:12:31
2 00:40:50 00:00:01
3 01:05:01 00:32:00
ID T1 T2 EarliestT2Time
1 00:00:04 00:09:00 00:09:00
2 00:40:50 00:00:01 00:00:01
3 01:05:01 00:32:00 00:32:00
感谢一个选项是将其从chron转换为时间,获取最小值和子集的索引
library(dplyr)
library(chron)
df1 %>%
group_by(ID) %>%
mutate(EarliestT2Time = T2[which.min(times(T2))])
#or use as.POSIXct from base R
#mutate(EarliestT2Time = T2[which.min(as.POSIXct(T2, format = "%H:%M:%S"))])
# A tibble: 6 x 4
# Groups: ID [3]
# ID T1 T2 EarliestT2Time
# <int> <chr> <chr> <chr>
#1 1 00:00:04 00:09:00 00:09:00
#2 1 00:05:00 01:00:59 00:09:00
#3 2 00:39:00 05:23:00 00:00:01
#4 2 00:23:52 06:12:31 00:00:01
#5 2 00:40:50 00:00:01 00:00:01
#6 3 01:05:01 00:32:00 00:32:00