Подмножество фрейма данных, используя вектор, включая NA - PullRequest
1 голос
/ 14 апреля 2020

Я хотел бы получить подмножество строк фрейма данных, где один из его столбцов равен значениям в векторе, где либо вектор, либо столбец фрейма данных могут иметь NA. Я хотел бы включить совпадение на NA, но только если и столбец, и вектор имеют NA. (К вашему сведению, это для функции labeller , которая получает вектор в качестве параметра.)

Некоторые данные:

df1 <- data.frame(x_var_value=c('a', 'b', NA), num=c(1,2,3))
v2 <- c('a', 'b')

Некоторые примеры, которые не работают пытаясь выбрать строки из df1, где x_var_value == v2:

df1[df1$x_var_value == v2]$x_var_value

df1[(df1$x_var_value == v2) | (is.na(df$x_var_value) & is.na(v2))]$x_var_value

library(tidyverse)
df1 %>% filter(x_var_value == v2)

Я мог бы использовать ответы из здесь или здесь , но как-то ускользает от меня.

EDIT : Я думаю, что функция labeller, вероятно, хочет выводить в том же порядке, что и ввод. Если это так, мне нужно совпадение в порядке v2.

EDIT 2 : Я также не знаю, будет ли когда-либо функция labeller когда-либо передавать значения переменных более одного раза. Наверное, нет?

Ответы [ 3 ]

1 голос
/ 14 апреля 2020

Мне кажется, проблема в том, что == v2 сравнивает x_var_value с вектором, а не с одним значением, поэтому вам нужно проверить, равно ли значение в , а не , равное v2

df1[df1$x_var_value %in% v2,]

Если v2 содержит NA, например, v2 <- c('a', NA), то в этот столбец будут включены строки с NA.

0 голосов
/ 14 апреля 2020

Другой вариант с data.table

library(data.table)
setDT(df1)[as.character(x_var_value) %chin% v2]
0 голосов
/ 14 апреля 2020

Разве вы не ищете match?

df1[match(v2, df1$x_var_value),]
#>   x_var_value num
#> 1           a   1
#> 2           b   2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...