选择R中缺少的首次观察

时间:2018-10-01 15:14:44

标签: r dataframe multiple-columns

我有一个看起来像这样的数据框:

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值作为“时间值”的最低值。我已经尝试了几种方法,例如创建宽格式,但都没有解决。有人知道一个简单的解决方案吗?

提前谢谢! 伊芙琳

1 个答案:

答案 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