Поднабор данных для всех уровней факторов, содержащий значения в векторе - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь поместить data.frame в r, чтобы получить все уровни факторов, которые содержат все значения в векторе в определенном столбце.Например:

dt=data.frame(fact=c(rep("a",3),rep("b",3),rep("c",3)),val=c(1,2,3,2,3,4,3,4,5))

, который выглядит следующим образом:

Теперь вектор: vec=c(1,2) Я хотел бы, чтобы функция возвращалатолько «a», потому что этот уровень столбца «fact» содержит как 1, так и 2 в столбце «val» (уровень «b» содержит только значение 2 и уровень «c», не относящиеся к двум).В действительности вектор может содержать любое количество элементов.

Кажется довольно простым, но не может найти ответ,

Ответы [ 2 ]

0 голосов
/ 23 мая 2018
sapply(tapply(dt$val, dt$fact, `%in%`, x=vec), all)

дает

    a     b     c 
 TRUE FALSE FALSE 

Сохраните этот логический вектор в какое-то новое значение, скажем, keep и подмножество таким образом:

dtsub <- split(dt, dt$fact)[[keep]]
0 голосов
/ 23 мая 2018

Мы делаем группу с 'фактом' и filter, если all значения 'vec' находятся в столбце 'val'

library(dplyr)
dt %>% 
  group_by(fact) %>% 
  filter(all(vec %in% val))
# A tibble: 3 x 2
# Groups:   fact [1]
#  fact    val
#  <fct> <dbl>
#1 a         1
#2 a         2
#3 a         3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...