2012-03-22 16 views
7

की पहचान करें मैं डेटा.फ्रेम में बाइनरी कॉलम की पहचान करना चाहता हूं।बाइनरी कॉलम

उदाहरण के लिए

, इस तालिका

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

देना होगा FALSE, FALSE, TRUE

उत्तर

8
apply(my.table,2,function(x) { all(x %in% 0:1) }) 

(या

apply(my.table,2,function(x) { all(na.omit(x) %in% 0:1) }) 

अगर आप NA मूल्यों के लिए अनुमति देना चाहते हैं)

+0

मैं करने के लिए कोशिश कर सकते हैं फ़ंक्शन (x) लंबाई (अद्वितीय (x))> 2 के साथ 0,1 से भिन्न स्तरों के साथ बाइनरी चर पकड़ें। शायद? – Seth

+1

और यदि वे सभी 0,1 के साथ कोडित नहीं हैं तो आप केवल दो मानों के लिए 'लंबाई (अद्वितीय (x) 'की जांच कर सकते हैं। – joran

+0

@ सेठ, @ जोरन, वे अच्छे विचार हैं, लेकिन यदि आपकी तालिका' मैट्रिक्स (सी (0,1,0,1,1,2), nrow = 3) 'क्या आप चाहते हैं कि दूसरा स्तंभ बाइनरी के रूप में पहचाना जा रहा हो ?? आपको थोड़ा और सावधान रहना होगा। यानी, मुझे लगता है कि यह निर्भर करता है कि यह कैसे निर्भर करता है आप "बाइनरी" को परिभाषित करते हैं। –

3

आप उन्हें में एनए के साथ द्विआधारी स्तंभों को स्वीकार करना चाहते हैं, तो निम्नलिखित चाल करना चाहिए:

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 

... या आप केवल 0,1, स्वीकार करता है, तो एनए:

is.binary <- function(v) { 
    x <- unique(v) 
    length(x) - sum(is.na(x)) == 2L && all(x[1:2] == 0:1) 
} 
+0

ऊपर मेरी टिप्पणी देखें - मुझे लगता है कि 'लम्बाई' 'लम्बाई' (अद्वितीय (x)) == 2' खतरनाक हो सकता है। .. –

+0

... इसलिए मैंने एक और संस्करण जोड़ा जो केवल 0/1/NA – Tommy

+0

स्वीकार करता है ठीक है, क्षमा करें, इसे याद किया। –

संबंधित मुद्दे