我有一个看起来像这样的数据框:
ID BP Time value (sec)
1 75 10000
1 79 20000
2 81 30000
2 77 40000
2 83 50000
3 100 40000
3 104 30000
3 94 20000
3 101 50000
我想为每个ID选择BP的第一个观察值。但是,“时间值”列并不是每个ID都按升序排列(例如ID = 3)。因此,对于每个ID,我想选择BP值作为“时间值”的最低值。我已经尝试了几种方法,例如创建宽格式,但都没有解决。有人知道一个简单的解决方案吗?
提前谢谢! 伊芙琳
答案 0 :(得分:0)
您可以使用[Route(...)]
来执行此操作。对于每个/
,使用dplyr
和过滤器抓取第一个(最低ID
值)。
Time_value_sec
编辑
以下是另一种方法。假设rank
列具有唯一值。
library(dplyr)
# Given your data
df1 <- structure(list(ID = c(1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), BP = c(75L, 79L, 81L, 77L, 83L, 100L, 104L, 94L, 101L), Time_value_sec = c(10000L, 20000L, 30000L, 40000L, 50000L, 40000L, 30000L, 20000L, 50000L)), .Names = c("ID", "BP", "Time_value_sec"), class = "data.frame", row.names = c(NA, -9L))
# Filtering: Grab the first item for each ID
df1 %>%
group_by(ID) %>%
filter(rank(Time_value_sec, ties.method = "first") == 1)
# Output
## # A tibble: 3 x 3
## # Groups: ID [3]
## ID BP Time_value_sec
## <int> <int> <int>
## 1 1 75 10000
## 2 2 81 30000
## 3 3 94 20000