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?
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
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.)
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),]
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ę.
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), ]
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)
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