根据数据集的行值应用规则
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
我是 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