Як видалити перший рядок кадру даних у R?


85

У мене є набір даних з 11 стовпців з понад 1000 рядків кожен. Стовпці були позначені V1, V2, V11 тощо. Я замінив імена на щось більш корисне для мене за допомогою команди "c". Я не розумів, що рядок 1 містив мітки для кожного стовпця, і мої фактичні дані починаються з рядка 2.

Чи є спосіб видалити рядок 1 і зменшити?

Відповіді:


139

Зберігайте мітки з оригінального файлу так:

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

Якщо у вас є стовпці з іменами x та y, ви можете звернутися до них так:

df$x
df$y

Якщо ви хочете фактично видалити перший рядок з data.frame, ви можете використовувати негативні індекси, як це:

df = df[-1,]

Якщо ви хочете видалити стовпець із data.frame, ви можете призначити йому NULL:

df$x = NULL

Ось кілька простих прикладів того, як створити data.frame у 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
Я не впевнений , якщо це ясно @akz: в означає , таким чином , цей параметр вказує R до заголовку навантаження. Детальніше див. header=TTTRUE?read.table
daroczig

Зверніть увагу, що якщо у вас є кадр даних з одним стовпцем, то, будь ласка, подивіться на цю відповідь - stackoverflow.com/a/3232770/4606130, де вам також знадобиться drop = FALSEпри негативному індексуванні
micstr

28

Ви можете використовувати негативне індексування для видалення рядків, наприклад:

dat <- dat[-1, ]

Ось приклад:

> 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

Тим не менш, у вас може бути більше проблем, ніж просто видалення міток, які опинилися в рядку 1. Більш імовірно, що R інтерпретував дані як текст і звідти перетворював на фактори. Перевірте, що str(foo), де fooзнаходиться ваш об’єкт даних, говорить про типи даних.

Здається, вам просто потрібно header = TRUEу своєму дзвінку прочитати дані (якщо припустити, що ви їх прочитали через read.table()або одну з обгортки).


13

Напевно, ніхто не хоче видаляти перший рядок. Отже, якщо ви шукаєте щось значуще, це умовний відбір

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

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

Це відповідь на питання, яке не було задане. Я думаю, це більше бентежить, ніж допомагає.
У. Віндл,

12

Хоча я погоджуюсь з найбільш голосованою відповіддю, ось ще один спосіб зберегти всі рядки, крім першого:

dat <- tail(dat, -1)

Це також можна досягти за допомогою dplyrпакета Хедлі Вікхема .

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

7

Я не фахівець, але це також може спрацювати,

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

Насправді це не працює, коли nrow(dat) == 1: Тоді оригінальний дат зберігається.
У. Віндл,

6

dat <- dat[-1, ]працював, але це вбило мій фрейм даних, змінивши його на інший тип. Натомість довелося використовувати, dat <- data.frame(dat[-1, ])але це, можливо, особливий випадок, оскільки цей фрейм даних спочатку мав лише один стовпець.


Це коментар, а не відповідь! Незважаючи на це, я не міг розмножуватися.
У. Віндл,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.