Выберите столбцы с пользовательским классом - PullRequest
0 голосов
/ 16 мая 2019

Вопрос очень простой.Я использую пакет haven, который создает собственный класс с именем haven_labelled при импорте данных из Stata в R (который имеет преимущество отображения меток в R).Я хотел бы выбрать столбцы, которые имеют этот пользовательский класс (или любой другой пользовательский класс).

Со стандартными классами можно использовать is.numeric, is.factor и т. Д.

Например:df <- Filter(is.numeric, df).

Можно найти множество других способов сделать это здесь .

Я попытался заменить эти примеры на class=="haven_labelled".

Например: df <- Filter(class=="haven_labelled", df), но это не работает.Выдает ошибку:

Error in class == "haven_labelled" : 
  comparison (1) is possible only for atomic and list types

Есть идеи?

РЕДАКТИРОВАТЬ:

При попытке найти решение H 1 я выяснил две вещи, которые могут быть важны для всех, кто используетпакет убежища.

  1. На самом деле имя класса должно быть «помечено», а не «haven_labelled».
  2. Выбор не работает, потому что в гавани создаются двойные классы для каждой переменной (и все они labelled в дополнение к другому классу).Следовательно, выборка, основанная на метке, просто возвращает полный набор данных.

1 Ответ

1 голос
/ 16 мая 2019

Вы можете создать простую функцию, чтобы проверить, принадлежит ли что-то классу "haven_labelled", а затем использовать ее для подмножества ваших данных.Например:

is.haven <- function(x) "haven_labelled" %in% class(x)

Filter(is.haven, df)

или

df[sapply(df, is.haven)]

или

dplyr::select_if(df, is.haven)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...