R 不带';没有预定义的名称
我正在尝试编写一个函数,该函数将返回数据帧中所有二进制变量的索引,但预定义变量或提供的变量列表除外。您可以使用以下方法生成示例数据:R 不带';没有预定义的名称,r,data-cleaning,sapply,R,Data Cleaning,Sapply,我正在尝试编写一个函数,该函数将返回数据帧中所有二进制变量的索引,但预定义变量或提供的变量列表除外。您可以使用以下方法生成示例数据: data<-data.frame("RESPONSE" = sample(c("YES","NO"),100,replace = T), "FACTOR" = sample(c("YES","NO","MAYBE"),100,replace = T), "BINARY" = sample(c("YES","
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))
以及所有未命名为“响应”的变量列表,使用:
但是我要查找的输出忽略预定义的列或列列表,并将返回与您获得的相同的输出:
names(data)=="BINARY"
我认为在sappy函数中使用这两个条件,但是sappy中的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
##期望的结果?
名称(数据)=“二进制”
#[1]假假真假
##理想方法
response.variable.name您是否需要sapply(data[setdiff(name(data),response.variable.name)],function(x)nlevels(as.factor(x))==2)
我想您只是在寻找&
,就像这样<代码>sapply(数据,函数(x)NLEVELES(as.factor(x))==2)&!名称(数据)%在%response.variable.name中
如果您在给定示例输入的情况下共享您要查找的输出,这将非常有用……这非常有用。谢谢你抽出时间。
names(data)=="BINARY"
unlist(Map(function(x, y) nlevels(factor(x)) == 2 &
y != response.variable.name, data, names(data)))
# RESPONSE FACTOR BINARY NUMERIC
# FALSE FALSE TRUE FALSE
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