Jak usunąć pierwszy wiersz ramki danych w R?

Mam zbiór danych z 11 kolumnami z ponad 1000 wierszy każda. Kolumny oznaczono V1, V2, V11 itd.. Zamieniłem nazwy na coś bardziej przydatnego dla mnie za pomocą polecenia "c". Nie zdawałem sobie sprawy, że wiersz 1 zawiera również etykiety dla każdej kolumny, a moje rzeczywiste dane zaczynają się od wiersza 2.

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

 68
Author: Community, 2011-09-25

6 answers

Zachowaj etykiety z oryginalnego pliku w następujący sposób:

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

Jeśli masz kolumny o nazwach x i y, możesz je zaadresować w następujący sposób:

df$x
df$y

Jeśli chcesz rzeczywiście usunąć pierwszy wiersz z danych.frame, możesz użyć indeksów ujemnych takich jak:

df = df[-1,]

Jeśli chcesz usunąć kolumnę z danych.ramka, można do niej przypisać NULL:

df$x = NULL

Oto kilka prostych przykładów jak tworzyć i manipulować danymi.ramka 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
 115
Author: James Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-25 00:01:53

Możesz użyć indeksowania ujemnego, aby 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

To powiedziawszy, możesz mieć więcej problemów niż tylko usunięcie etykiet, które znalazły się w wierszu 1. Jest bardziej prawdopodobne, że R zinterpretował dane jako tekst i następnie przekształcił je w czynniki. Sprawdź, co str(foo), Gdzie foo jest Twoim obiektem danych, mówi o typach danych.

Wygląda na to, że po prostu potrzebujesz header = TRUE w swoim wywołaniu, aby odczytać dane (zakładając, że odczytasz je przez read.table() lub jeden z nich to opakowanie.)

 25
Author: Gavin Simpson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-24 20:17:29

Nikt chyba nie chce usunąć pierwszego rzędu. Jeśli więc szukasz czegoś znaczącego, to jest wybór warunkowy

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

>> setNew<-set[!(set$length=="long" & set$E==0),]
 12
Author: user3495945,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-26 19:22:42

dat <- dat[-1, ] zadziałało, ale zniszczyło mój dataframe, zmieniając go na inny typ. Musiał zamiast tego użyć dat <- data.frame(dat[-1, ]) ale jest to prawdopodobnie szczególny przypadek, ponieważ ten ramka danych początkowo miała tylko jedną kolumnę.

 5
Author: cardamom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-05 11:54:01

Nie jestem ekspertem, ale to też może zadziałać.]}

dat <- dat[2:nrow(dat), ]
 5
Author: Bipul Mohanto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-23 15:32:35

Chociaż zgadzam się z najczęściej głosowaną odpowiedzią, oto inny sposób na zachowanie wszystkich wierszy z wyjątkiem pierwszego:

dat <- tail(dat, -1)
Można to również osiągnąć za pomocą pakietu Hadleya Wickhama.
dat <- dat %>% slice(-1)
 1
Author: EMcKinney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-13 13:40:06