我正在试着写一段代码,但是我还没能达到结果。我正在使用来自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")发布于 2019-07-12 00:14:02
首先,我们确保会议列是字符,而不是因子。然后我们用一个更有用的"No"替换NA,然后我们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)发布于 2019-07-12 00:22:31
另一种可能是:
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 https://stackoverflow.com/questions/56993351
复制相似问题