r - 返回没有预定义名称的所有因子变量的索引
问题描述
我正在尝试编写一个函数,该函数将返回数据框中所有二进制变量的索引,但提供的预定义变量或变量列表除外。你可以用这个生成示例数据:
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 值。我知道这个问题有一个简单的解决方法
解决方案
## 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
推荐阅读
- java - pom.xml/maven项目依赖频繁更改时,自动更新WEB-INF/lib目录的正确方法是什么?
- vba - 生成最大数量的组合
- c# - 如何使用将用户输入写入文本文件的自定义方法编写 C# 程序?
- python - 试图理解为什么比较不起作用但过滤器起作用(熊猫)
- c++ - 指向 std::invoke 中成员函数对象的指针
- angular - Angular6 Jasmine TypeError:expect(...).toBeVisible 不是函数
- canvas - Konva 将形状转换为 DataUrl() 会导致空白图像
- java - Java 8 Executors 在使用 ExecutorService 读取“100k”文件路径时抛出 RejectedExecutionException
- android - 带有 ListView 的 SwipeRefreshLayout 占用了所有可用空间
- javascript - 如何实现半屏滚动锁定效果?