возвращает индекс всех факторных переменных, которые не имеют предварительно определенного имени - PullRequest
0 голосов
/ 03 июня 2019

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

data<-data.frame("RESPONSE" = sample(c("YES","NO"),100,replace = T),
             "FACTOR" = sample(c("YES","NO","MAYBE"),100,replace = T),
             "BINARY" = sample(c("YES","NO"),100,replace = T),
             "NUMERIC" = sample(1:100,100,replace = T))

В этом случае предопределенная переменная, которую следует игнорировать, - "RESPONSE"

response.variable.name<-"RESPONSE"

Я могу получить список всех двоичных переменных, используя:

sapply(data,function(x) nlevels(as.factor(x))==2)

и список всех переменных, не названных «RESPONSE», используя:

!names(data) %in% response.variable.name

, но вывод, который я ищу, игнорирует предопределенный столбец или список столбцов и возвращаеттот же вывод, который вы получили бы:

names(data)=="BINARY"

Я подумал, используя два условия внутри функции sapply, но names (x) внутри sapply возвращает значения NULL.Я знаю, что есть легкое решение этой проблемы

Ответы [ 2 ]

1 голос
/ 03 июня 2019
## Desired result?
names(data)=="BINARY"
# [1] FALSE FALSE  TRUE FALSE

## Desired method
response.variable.name<-"RESPONSE"
sapply(data,function(x) nlevels(as.factor(x))==2) & !names(data) %in% response.variable.name
# RESPONSE   FACTOR   BINARY  NUMERIC 
#    FALSE    FALSE     TRUE    FALSE 
## same values, has names too (bonus!)
## wrap in `unname()` if you don't like names
0 голосов
/ 03 июня 2019

Мы можем использовать Map из base R

unlist(Map(function(x, y) nlevels(factor(x)) == 2 &
       y != response.variable.name, data, names(data)))
#  RESPONSE   FACTOR   BINARY  NUMERIC 
#   FALSE    FALSE     TRUE    FALSE 

Или используя imap

library(tidyverse)
data %>% 
   imap_lgl(~ nlevels(.x) == 2 & .y != response.variable.name)
#  RESPONSE   FACTOR   BINARY  NUMERIC 
#   FALSE    FALSE     TRUE    FALSE 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...