Выбор элементов именованного вектора с помощью dplyr / tidyr - PullRequest
1 голос
/ 28 сентября 2019

Очень простой вопрос, который я не могу понять по какой-то причине.

У меня есть именованный вектор:

dat <- c("Clyde" = 1, "Susy" = 2, "Frank" = 3, "John" = 4)

Как выбрать только числа Клайда и Фрэнка, используя dplyr?Код ниже, кажется, не делает это.

dat %>% select(Clyde, Frank)

Я уверен, что это очень простое решение, но не могу понять.Спасибо!

1 Ответ

1 голос
/ 28 сентября 2019

select работает, когда данные data.frame, а не по имени vector.Одним из вариантов будет преобразование в два столбца tibble с enframe (из tibble), filter столбцами 'name' и затем deframe для создания именованного vector

library(tibble)
librarry(dplyr)
dat %>%
    enframe %>% 
    filter(name %in% c("Clyde", "Frank")) %>%
    deframe
#  Clyde Frank 
#   1     3 

Если мы используем magrittr, другой вариант - extract (не то, что в tidyr есть похожая функция - поведение отличается), который является псевдонимом для [

library(magrittr)
dat %>%
    extract(c("Clyde", "Frank"))
#   Clyde Frank 
#    1     3 

Или, если мы хотим использовать select, преобразовать его в 4-столбец data.frame / tibble

dat %>% 
    t %>% 
    as_tibble %>%
    select(Clyde, Frank)

Здесь мы сначала преобразуем его в matrix с транспонированием вектора(поскольку vector и matrix могут содержать только один класс, это нормально), затем преобразуйте его в tibble (as_tibble) и используйте select для выбора столбцов с именами столбцов без кавычек


В base R просто используется names

dat[c("Clyde", "Frank")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...