webentwicklung-frage-antwort-db.com.de

Wie lösche ich die erste Zeile eines Datenrahmens in R?

Ich habe einen Datensatz mit 11 Spalten mit jeweils über 1000 Zeilen. Die Spalten waren mit V1, V2, V11 usw. beschriftet. Ich habe die Namen mit dem Befehl "c" durch etwas ersetzt, das für mich nützlicher ist. Ich wusste nicht, dass Zeile 1 auch Beschriftungen für jede Spalte enthält und meine tatsächlichen Daten in Zeile 2 beginnen.

Gibt es eine Möglichkeit, Zeile 1 zu löschen und zu dekrementieren?

77
akz

Behalten Sie die Beschriftungen aus Ihrer Originaldatei wie folgt bei:

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

Wenn Sie Spalten mit den Namen x und y haben, können Sie diese folgendermaßen ansprechen:

df$x
df$y

Wenn Sie die erste Zeile tatsächlich aus einem data.frame löschen möchten, können Sie negative Indizes wie folgt verwenden:

df = df[-1,]

Wenn Sie eine Spalte aus einem data.frame löschen möchten, können Sie ihr NULL zuweisen:

df$x = NULL

Hier einige einfache Beispiele zum Erstellen und Bearbeiten eines data.frame in 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
129
James Thompson

Sie können die negative Indizierung verwenden, um Zeilen zu entfernen, z.

dat <- dat[-1, ]

Hier ist ein Beispiel:

> 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

Das heißt, Sie haben möglicherweise mehr Probleme, als nur die Beschriftungen zu entfernen, die in Zeile 1 landeten. Es ist mehr als wahrscheinlich, dass R die Daten als Text interpretiert und von dort in Faktoren konvertiert hat. Überprüfen Sie, was str(foo), wobei foo Ihr Datenobjekt ist, über die Datentypen aussagt.

Es hört sich so an, als ob Sie in Ihrem Aufruf nur header = TRUE Benötigen, um die Daten einzulesen (vorausgesetzt, Sie lesen sie über read.table() oder einen seiner Wrapper ein.)

26
Gavin Simpson

Wahrscheinlich möchte niemand die erste Zeile wirklich entfernen. Wenn Sie also nach etwas Sinnvollem suchen, ist dies eine bedingte Auswahl

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

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

Ich bin kein Experte, aber das kann auch funktionieren,

dat <- dat[2:nrow(dat), ]
5
Bipul Mohanto

dat <- dat[-1, ] Hat funktioniert, aber mein Datenframe wurde dadurch zerstört und in einen anderen Typ geändert. Musste stattdessen dat <- data.frame(dat[-1, ]) verwenden, aber dies ist möglicherweise ein Sonderfall, da dieser Datenrahmen anfangs nur eine Spalte hatte.

5
cardamom

Obwohl ich der am häufigsten gewählten Antwort zustimme, gibt es hier eine andere Möglichkeit, alle Zeilen außer der ersten zu behalten:

dat <- tail(dat, -1)

Dies kann auch mit Hadley Wickhams Paket dplyr erreicht werden.

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