2012-03-21 10 views
15

क्या कोई कॉलम छोड़कर किसी डेटा फ्रेम के सभी कॉलम चुनने का कोई तरीका है: यह df[,-1] का एनालॉग होगा, सूचकांक के बजाय कॉलम नाम का उपयोग करने के अलावा?नाम से कॉलम को अचयनित करना, आर

उत्तर

37

आप वेक्टर सबसेटिंग का उपयोग करके ऐसा कर सकते हैं।

R> dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3) 

फिर चयन को उल्टा करने के ! ऑपरेटर का उपयोग करें:: सबसे पहले, एक डमी डेटा सेट बनाने

R> dd[ ,!(colnames(dd) == "A")] 

    B C D 
1 1 1 1 
2 2 2 2 
3 3 3 3 

वैकल्पिक रूप से, आप हो सकता है:

  • एक थोड़ा छोटा संस्करण (@ टोमास की सौजन्य):

    dd[ , names(dd) != "A"] 
    
  • (@Tyler के सौजन्य से) एकाधिक स्तंभों के साथ सामना करने के लिए

    dd[ ,!(colnames(dd) %in% c("A", "B"))] 
    
7

एक स्तंभ की पहचान के लिए समाप्त हो which() समारोह इस्तेमाल कर सकते हैं।

dd <- data.frame(A = 1:5, B = 1:5, C=1:5) 

dd[, -which(names(dd) == "A")] 

या सकारात्मक

dd[, which(names(dd) != "A")] 

हालांकि, अगर वहाँ कोई कॉलम "A" का नाम दिया है, तो आप एक डेटा फ्रेम 0 कॉलम और nrow(dd) पंक्तियों के साथ मिलेगा। तो "ए" नामक कॉलम के अस्तित्व की जांच करना अच्छा होगा।

if(any(names(dd) == "A")) { 
    dd[, which(names(dd) != "A")] 
} 
5

subset समारोह पहले से ही वाक्य रचना इस प्रकार की अनुमति देता है, मदद पृष्ठ पर उदाहरण से: आप dplyr पैकेज का उपयोग कर सकते

subset(airquality, Day == 1, select = -Temp) 
0

एकाधिक स्तंभों का चयन रद्द करने के लिए। एक उदाहरण के रूप में:

dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3) 

library(dplyr) 
newdd <- select(dd, -A,-C) 

यह @csgillespie के सुझाव के अलावा एक और तरीका है।