Tidyverse 解决方案:
library(dplyr)
dat %>%
group_by(record) %>%
filter(any(question == 'provider' & value %in% 0:1)) %>%
ungroup()
# # A tibble: 3 x 3
# record question value
# <int> <fct> <int>
# 1 26544 provider 1
# 2 26544 confidence 4
# 3 26544 communication 3
dat %>%
filter(question == 'provider' & value %in% 0:1) %>%
select(record) %>%
left_join(dat, by = "record")
# Joining, by = "record"
# record question value
# 1 26544 provider 1
# 2 26544 confidence 4
# 3 26544 communication 3
数据表:
(注意:我在这里使用magrittr::%>%,通常在上面加载dplyr,仅用于演示。我喜欢类似管道的命令流,但不难适应非magrittr流。)
library(data.table)
library(magrittr)
datDT[, .SD[ any(question == 'provider' & value %in% 0:1), ], by = "record" ]
# record question value
# 1: 26544 provider 1
# 2: 26544 confidence 4
# 3: 26544 communication 3
datDT[ question == 'provider' & value %in% 0:1, .(record) ] %>%
datDT[., on = "record" ]
# record question value
# 1: 26544 provider 1
# 2: 26544 confidence 4
# 3: 26544 communication 3
数据
dat <- data.frame(
record = c(26544L, 26544L, 26544L, 655445L, 655445L, 655445L),
question = rep(c("provider", "confidence", "communication"), times = 2),
value = c(1L, 4L, 3L, 9L, 1L, 4L)
)