根据数据集的行值应用规则

Apply a rule based on row values of a dataset

我是 R 的初学者,我已经开发了一些程序,但是我将向您展示的问题还没有发生在我身上。这是我正在处理的 TSE 数据框:

   ID TIME EVENT
1 150    1     A
2 150    2     B
3 150    2     C
4 150    2     D
5 151    1     C
6 151    2     A
7 151    3     B
8 151    3     D

此数据框包含 3 个变量:

ID : 此人的 ID,

TIME:时间索引,

EVENT:在特定时刻发生的事件。

我想根据规则删除两个或多个事件在同一时间值 (TIME) 发生 的行。假设规则是:C>B>A>D(其中“>”表示更可取)

因此,在我的示例中,我只想保留这些行:

   ID TIME EVENT
1 150    1     A
3 150    2     C
5 151    1     C
6 151    2     A
7 151    3     B

您可以很容易地看到第 2、4、8 行由于定义的规则而消失了

我想这不应该编程起来那么棘手,但我真的不知道如何放下它。

谢谢大家的期待。

Jérémie P.

这是使用 dplyr 的可能解决方案。

首先重现你的数据

DF <- data.frame(ID = rep(150:151, each=4), 
                 time=c(1, 2, 2, 2, 1, 2, 3, 3), 
                 EVENT=c("A", "B", "C", "D", "C", "A", "B", "D"))

target_rule <- c("C", "B", "A", "D")

然后我们可以使用dplyr命令的组合来排序,select等。 下面我使用你的 EVENT 的因子版本根据你的目标规则对它们进行排序。

library("dplyr")
DF %>% 
  group_by(ID, time) %>%                               # Consider each combo of ID and time    
  mutate(fevent=factor(EVENT, levels=target_rule)) %>% # Create ordered version of EVENT 
  arrange(fevent) %>%                                  # Sort according to rule
  summarise(EVENT=first(EVENT)) %>%                    # Pick just the first 
  ungroup() %>% 
  arrange(ID) 

这会产生

# A tibble: 5 x 5
     ID  time EVENT fevent    rn
  <int> <dbl> <fct> <fct>  <int>
1   150     1 A     A          1
2   150     2 C     C          1
3   151     1 C     C          1
4   151     2 A     A          1
5   151     3 B     B          1