首页 > 解决方案 > 返回没有预定义名称的所有因子变量的索引

问题描述

我正在尝试编写一个函数,该函数将返回数据框中所有二进制变量的索引,但提供的预定义变量或变量列表除外。你可以用这个生成示例数据:

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 函数中使用这两个条件,但是 sapply 中的 names(x) 返回 NULL 值。我知道这个问题有一个简单的解决方法

标签: rdata-cleaningsapply

解决方案


## 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

推荐阅读