我正在尝试编写代码,但无法获得结果。我正在使用tidyverse的过滤器。我是R的新手,所以很难找到。
这是数据框的形式:
ID Meeting1 Meeting2
P40 Yes NA
P40 Yes NA
P40 NA Yes
P42 NA Yes
P43 NA Yes
P44 Yes NA
P44 NA Yes
我正在尝试编写一个过滤ID的代码,并查找到第2个会议的观测值,但是在第2个会议之前却无法先达到第1个会议。
这是我写的代码:
tt %>% group_by(ID) %>% filter(Meeting1 == "Yes" | Meeting2 == "Yes")
答案 0 :(得分:0)
首先,我们确保会议栏目具有特色,而不是要素。然后,我们将NA
替换为更有用的"No"
,然后filter
:
dd %>%
group_by(ID) %>%
mutate_at(vars(starts_with("Meeting")), as.character) %>%
mutate_at(vars(starts_with("Meeting")), ~ifelse(is.na(.), "No", .)) %>%
filter(any(Meeting2 == "Yes") & !any(Meeting1 == "Yes"))
# # A tibble: 2 x 3
# # Groups: ID [2]
# ID Meeting1 Meeting2
# <fct> <chr> <chr>
# 1 P42 No Yes
# 2 P43 No Yes
处理此示例数据:
dd = read.table(text = 'ID Meeting1 Meeting2
P40 Yes NA
P40 Yes NA
P40 NA Yes
P42 NA Yes
P43 NA Yes
P44 Yes NA
P44 NA Yes', header = T)
答案 1 :(得分:0)
另一种可能是:
df %>%
group_by(ID) %>%
filter(any(cumsum(!is.na(Meeting1)) == 0 & cumsum(!is.na(Meeting2)) == 1))
ID Meeting1 Meeting2
<chr> <chr> <chr>
1 P42 <NA> Yes
2 P43 <NA> Yes