R में डेटाफ़्रेम की पहली पंक्ति को कैसे हटाएं?


85

मेरे पास एक 1000 से अधिक पंक्तियों के साथ 11 कॉलम के साथ एक डेटासेट है। स्तंभों को V1, V2, V11, आदि के रूप में लेबल किया गया था। मैंने "c" कमांड का उपयोग करके मेरे लिए कुछ और उपयोगी नामों को प्रतिस्थापित किया। मुझे यह महसूस नहीं हुआ कि पंक्ति 1 में प्रत्येक कॉलम के लिए लेबल भी हैं और मेरा वास्तविक डेटा पंक्ति 2 पर शुरू होता है।

क्या पंक्ति 1 और विलोपन हटाने का कोई तरीका है?

जवाबों:


139

अपनी मूल फ़ाइल से इस तरह लेबल रखें:

df = read.table('data.txt', header = T)

यदि आपके पास x और y नाम के कॉलम हैं, तो आप उन्हें इस तरह संबोधित कर सकते हैं:

df$x
df$y

यदि आप वास्तव में पहली पंक्ति को data.frame से हटाना चाहते हैं, तो आप इस तरह के नकारात्मक सूचकांकों का उपयोग कर सकते हैं:

df = df[-1,]

यदि आप किसी स्तंभ को data.frame से हटाना चाहते हैं, तो आप इसे पूरा कर सकते हैं:

df$x = NULL

यहाँ कुछ सरल उदाहरण दिए गए हैं कि कैसे R में एक डेटा.फ्रेम बनायें और उसमें हेरफेर करें:

# create a data.frame with 10 rows
> x = rnorm(10)
> y = runif(10)
> df = data.frame( x, y )

# write it to a file
> write.table( df, 'test.txt', row.names = F, quote = F )

# read a data.frame from a file: 
> read.table( df, 'test.txt', header = T )

> df$x
 [1] -0.95343778 -0.63098637 -1.30646529  1.38906143  0.51703237 -0.02246754
 [7]  0.20583548  0.21530721  0.69087460  2.30610998
> df$y
 [1] 0.66658148 0.15355851 0.60098886 0.14284576 0.20408723 0.58271061
 [7] 0.05170994 0.83627336 0.76713317 0.95052671

> df$x = x
> df
            y           x
1  0.66658148 -0.95343778
2  0.15355851 -0.63098637
3  0.60098886 -1.30646529
4  0.14284576  1.38906143
5  0.20408723  0.51703237
6  0.58271061 -0.02246754
7  0.05170994  0.20583548
8  0.83627336  0.21530721
9  0.76713317  0.69087460
10 0.95052671  2.30610998

> df[-1,]
            y           x
2  0.15355851 -0.63098637
3  0.60098886 -1.30646529
4  0.14284576  1.38906143
5  0.20408723  0.51703237
6  0.58271061 -0.02246754
7  0.05170994  0.20583548
8  0.83627336  0.21530721
9  0.76713317  0.69087460
10 0.95052671  2.30610998

> df$x = NULL
> df 
            y
1  0.66658148
2  0.15355851
3  0.60098886
4  0.14284576
5  0.20408723
6  0.58271061
7  0.05170994
8  0.83627336
9  0.76713317
10 0.95052671

3
मुझे यकीन नहीं है कि यह @akz के लिए स्पष्ट है: header=Tइस Tस्टैंड में TRUE, इसलिए यह पैरामीटर आर को हेडर लोड करने के लिए कहता है। ?read.tableविवरण के लिए देखें।
२०:३

ध्यान दें कि यदि आपके पास एक एकल स्तंभ डेटा फ़्रेम है तो कृपया इस उत्तर को देखें - stackoverflow.com/a/3232770/4606130 जहां drop = FALSEनकारात्मक अनुक्रमण के दौरान आपको एक अच्छी तरह से आवश्यकता होगी
माइक्रो करें

28

आप पंक्तियों को हटाने के लिए नकारात्मक अनुक्रमण का उपयोग कर सकते हैं, जैसे:

dat <- dat[-1, ]

यहाँ एक उदाहरण है:

> dat <- data.frame(A = 1:3, B = 1:3)
> dat[-1, ]
  A B
2 2 2
3 3 3
> dat2 <- dat[-1, ]
> dat2
  A B
2 2 2
3 3 3

कहा कि, आपको केवल 1 पर समाप्त होने वाले लेबलों को हटाने की तुलना में अधिक समस्याएं हो सकती हैं। यह अधिक संभावना है कि आर ने डेटा को पाठ और थेंस को कारकों में परिवर्तित कर दिया है। जाँचें कि आपकी डेटा ऑब्जेक्ट str(foo)कहाँ fooहै, डेटा प्रकारों के बारे में कहते हैं।

ऐसा लगता है कि आपको header = TRUEडेटा में पढ़ने के लिए बस अपने कॉल की आवश्यकता है (यह मानते हुए कि आप read.table()इसे रीडर्स के माध्यम से पढ़ रहे हैं या इसमें से एक है।)


13

कोई भी वास्तव में पंक्ति एक को निकालना नहीं चाहता है। इसलिए यदि आप किसी सार्थक चीज की तलाश कर रहे हैं, तो यह सशर्त चयन है

#remove rows that have long length and "0" value for vector E

>> setNew<-set[!(set$length=="long" & set$E==0),]

यह एक सवाल का जवाब है जो नहीं पूछा गया था। मुझे लगता है कि यह मदद करने से ज्यादा भ्रमित करने वाला है।
यू। विंडल

12

जबकि मैं सबसे अधिक मत वाले उत्तर से सहमत हूं, यहां पहले को छोड़कर सभी पंक्तियों को रखने का एक और तरीका है:

dat <- tail(dat, -1)

यह हैडली विकम के dplyrपैकेज का उपयोग करके भी पूरा किया जा सकता है ।

dat <- dat %>% slice(-1)

7

मैं विशेषज्ञ नहीं हूँ, लेकिन यह भी काम कर सकता है,

dat <- dat[2:nrow(dat), ]

वास्तव में यह nrow(dat) == 1तब काम नहीं करता है जब : तब मूल डेटा को संरक्षित किया जाता है।
यू। विंडल

6

dat <- dat[-1, ]काम किया लेकिन इसने मेरे डेटाफ्रेम को मार दिया, इसे दूसरे प्रकार में बदल दिया। इसके बजाय उपयोग करना था, dat <- data.frame(dat[-1, ])लेकिन यह संभवतः एक विशेष मामला है क्योंकि इस डेटाफ्रेम में शुरू में केवल एक कॉलम था।


यह एक टिप्पणी है, उत्तर नहीं! उसके बावजूद मैं प्रजनन नहीं कर सका।
यू। विंडल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.