我知道我的头衔可能没有意义所以让我解释一下。我有一个数据框,大约有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分组并找到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 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
由于
答案 0 :(得分:1)
一个选项是将其从COALESCE()
转换为COALESCE(expr1, expr2, ...., expr_n)
,获取最小值和子集的索引
times
如果我们只想包含一行,请执行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
slice