R'deki bir veri çerçevesinin ilk satırı nasıl silinir?


86

Her biri 1000'den fazla satır içeren 11 sütunlu bir veri kümem var. Sütunlar V1, V2, V11 vb. Olarak etiketlendi. "C" komutunu kullanarak isimleri benim için daha faydalı bir şeyle değiştirdim. Satır 1'in her sütun için etiketler içerdiğini ve gerçek verilerimin 2. satırda başladığını fark etmemiştim.

1. satırı silip eksiltmenin bir yolu var mı?

Yanıtlar:


140

Orijinal dosyanızdaki etiketleri şu şekilde saklayın:

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

X ve y adlı sütunlarınız varsa, bunları şu şekilde ele alabilirsiniz:

df$x
df$y

Bir data.frame'deki ilk satırı gerçekten silmek isterseniz, aşağıdaki gibi negatif indeksler kullanabilirsiniz:

df = df[-1,]

Bir data.frame'den bir sütunu silmek isterseniz, ona NULL atayabilirsiniz:

df$x = NULL

R'de bir data.frame'in nasıl oluşturulacağına ve değiştirileceğine dair bazı basit örnekler:

# 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
O @akz açık olup olmadığından emin değilim: in açılımı bu parametre yük başlığına R söyler, böylece. Ayrıntılar için bakın. header=TTTRUE?read.table
daroczig

Tek sütunlu bir veri çerçeveniz varsa, lütfen şu yanıta bakın - stackoverflow.com/a/3232770/4606130drop = FALSE , negatif indeksleme sırasında da ihtiyacınız olacak
micstr

28

Satırları kaldırmak için negatif indekslemeyi kullanabilirsiniz, örneğin:

dat <- dat[-1, ]

İşte bir örnek:

> 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

Bununla birlikte, 1. satırda sonlanan etiketleri kaldırmaktan daha fazla sorun yaşayabilirsiniz. R'nin verileri metin olarak yorumlaması ve dolayısıyla faktörlere dönüştürülmesi daha olasıdır. Neyi str(foo), nerede kontrol edinfooVeri nesnenizin veri türleri hakkında olduğunu .

header = TRUEAramanızda verileri okumak için ihtiyacınız varmış gibi geliyor (veriyi read.table()veya sarmalayıcılarından birini okuduğunuzu varsayarsak ).


13

Muhtemelen kimse birinci satırı kaldırmak istemez. Yani anlamlı bir şey arıyorsanız, bu koşullu seçimdir

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

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

Bu, sorulmayan bir sorunun cevabıdır. Yardım etmekten daha kafa karıştırıcı olduğunu düşünüyorum.
U. Windl

13

En çok oylanan yanıta katılıyorum, ancak ilki hariç tüm satırları tutmanın başka bir yolu:

dat <- tail(dat, -1)

Bu, Hadley Wickham'ın dplyrpaketi kullanılarak da gerçekleştirilebilir .

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

7

Uzman değilim ama bu da işe yarayabilir.

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

Aslında bu şu durumlarda çalışmaz nrow(dat) == 1: Daha sonra orijinal veri korunur.
U. Windl

6

dat <- dat[-1, ]çalıştı ama veri çerçevemi öldürdü, onu başka bir türe değiştirdi. Bunun yerine kullanılması gerekiyordu, dat <- data.frame(dat[-1, ])ancak bu veri çerçevesinin başlangıçta yalnızca bir sütunu olduğu için bu muhtemelen özel bir durumdur.


Bu bir yorum, cevap değil! Buna rağmen çoğalamadım.
U. Windl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.