Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 识别二进制列_R - Fatal编程技术网

R 识别二进制列

R 识别二进制列,r,R,我想识别data.frame中的二进制列 例如,这个表 my.table <-read.table(text="a,b,c 0,2,0 0.25,1,1 1,0,0", header=TRUE, as.is=TRUE,sep = ",") my.table (或 如果要允许NA值如果要接受包含NA的二进制列,请执行以下操作: is.binary <- function(v) { x <- unique(v) length(x) - sum(is.na(x)) == 2

我想识别data.frame中的二进制列

例如,这个表

my.table <-read.table(text="a,b,c
0,2,0
0.25,1,1
1,0,0", header=TRUE, as.is=TRUE,sep = ",")
my.table
(或


如果要允许NA值

如果要接受包含NA的二进制列,请执行以下操作:

is.binary <- function(v) {
  x <- unique(v)
  length(x) - sum(is.na(x)) == 2L
}

my.table <- data.frame(a=11:15, b=c(T,F,T,NA,T), c=c('foo',NA,'bar','bar','foo'))
vapply(my.table, is.binary, logical(1))
#    a     b     c 
#FALSE  TRUE  TRUE 

is.binary我可能会尝试捕获函数(x)长度(unique(x))>2的级别不同于0,1的二进制变量。也许吧?如果它们不是全部用0,1编码的,你可以只检查两个值的
length(unique(x)
。@Seth,@Joran,这些都是好主意,但是如果你的表是
矩阵(c(0,1,0,1,1,2),nrow=3)
您希望第二列被检测为二进制吗?您必须更加小心。也就是说,我想这取决于您如何定义“二进制”。也许
可以用
代替
应用(,2)
?!。我听说(在某处读过)那
sapply
可能更快。请看我上面的评论——我认为基于
length(unique(x))==2的“binary”可能会很危险。。。
apply(my.table,2,function(x) { all(na.omit(x) %in% 0:1) })
is.binary <- function(v) {
  x <- unique(v)
  length(x) - sum(is.na(x)) == 2L
}

my.table <- data.frame(a=11:15, b=c(T,F,T,NA,T), c=c('foo',NA,'bar','bar','foo'))
vapply(my.table, is.binary, logical(1))
#    a     b     c 
#FALSE  TRUE  TRUE 
is.binary <- function(v) {
  x <- unique(v)
  length(x) - sum(is.na(x)) == 2L && all(x[1:2] == 0:1)
}