return 没有预定义名称的所有因子变量的索引
return index of all factor variables that don't have a predefined name
我正在尝试编写一个函数,它将 return 数据框中所有二进制变量的索引,预定义变量或提供的变量列表除外。你可以用这个生成示例数据:
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
但我正在寻找的输出忽略了预定义的列或列列表,并且 return 与您将获得的输出相同:
names(data)=="BINARY"
我想在 sapply 函数中使用两个条件,但在 sapply returns NULL 值中使用 names(x)。我知道这个问题有一个简单的解决方法
我们可以使用 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
## 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
我正在尝试编写一个函数,它将 return 数据框中所有二进制变量的索引,预定义变量或提供的变量列表除外。你可以用这个生成示例数据:
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
但我正在寻找的输出忽略了预定义的列或列列表,并且 return 与您将获得的输出相同:
names(data)=="BINARY"
我想在 sapply 函数中使用两个条件,但在 sapply returns NULL 值中使用 names(x)。我知道这个问题有一个简单的解决方法
我们可以使用 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
## 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