2011-09-24 12 views
62

Mam zestaw danych z 11 kolumn z ponad 1000 wierszy każdego. Kolumny były oznaczone jako V1, V2, V11, itd. Wymieniłem nazwy na coś bardziej przydatnego przy użyciu polecenia "c". Nie zdawałem sobie sprawy, że wiersz 1 zawierał także etykiety dla każdej kolumny, a moje rzeczywiste dane zaczynają się od wiersza 2.Jak usunąć pierwszy wiersz ramki danych w R?

Czy istnieje sposób na usunięcie wiersza 1 i zmniejszenie?

Odpowiedz

105

przechowywać etykiet z oryginalnego pliku tak (zakładając, że ją przeczytać w poprzez read.table() lub jednego To owijarki.):

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

Jeśli kolumny o nazwie x i Y, można je rozwiązywać tak:

df$x 
df$y 

Jeśli chcesz faktycznie usuwać t on pierwszym rzędzie z data.frame, można użyć negatywnych wskaźników tak:

df = df[-1,] 

Jeśli chcesz usunąć kolumnę z data.frame, można przypisać do niego NULL:

Oto kilka prostych przykładów, jak tworzyć i manipulować data.frame w 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

Nie jestem pewien, czy jest to oczywiste dla @akz: w 'header = T'' T' oznacza 'TRUE', więc ten parametr mówi R, aby załadować nagłówek. Szczegółowe informacje znajdują się w '? Read.table'. – daroczig

+0

Należy pamiętać, że jeśli masz ramkę danych z jedną kolumną, spójrz na tę odpowiedź - https://stackoverflow.com/a/3232770/4606130 gdzie będziesz potrzebować 'drop = FALSE' oraz negatywnego indeksowania – micstr

21

Można użyć negatywny indeksowanie usunąć wiersze, np:

dat <- dat[-1, ] 

Oto przykład:

> 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 

Powiedział, że można mieć więcej problemów niż tylko usuwanie etykiet, które zakończyły się w wierszu 1. Jest bardziej prawdopodobne, że R zinterpretował dane jako tekst, a następnie przekształcił je w czynniki. Sprawdź, co str(foo), gdzie foo jest twoim obiektem danych, mówi o typach danych.

Brzmi to po prostu trzeba header = TRUE w wywołaniu czytać w danych

+0

całkowicie rację Gavin. To była głowa = FALSE, która to dała. – akz

11

Nikt chyba naprawdę chce usunąć jeden wiersz. Więc jeśli szukasz czegoś sensownego, czyli wybór warunkowy

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

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

To jest odpowiedź na pytanie, które nie zostało zadane.Myślę, że to bardziej zagmatwane niż pomoc. –

3

dat <- dat[-1, ] pracował ale zabił mojego dataframe, zmieniając go do innego typu. Musiał zamiast tego użyć dat <- data.frame(dat[-1, ]), ale jest to prawdopodobnie specjalny przypadek, ponieważ ta ramka danych początkowo miała tylko jedną kolumnę.

+0

To jest komentarz, a nie odpowiedź! Mimo to nie mogłem się rozmnażać. –

3

Nie jestem ekspertem, ale to może działać, jak również,

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

Właściwie to nie działa, gdy 'nrow (dat) == 1': Wtedy oryginalny dat jest zachowywany. –

Powiązane problemy