R 识别二进制列
我想识别data.frame中的二进制列 例如,这个表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
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)
}