Как удалить первую строку фрейма данных в R?


86

У меня есть набор данных с 11 столбцами по 1000 строк в каждом. Столбцы были помечены как V1, V2, V11 и т. Д. Я заменил имена на что-то более полезное для меня, используя команду «c». Я не понимал, что строка 1 также содержит метки для каждого столбца, а мои фактические данные начинаются со строки 2.

Есть ли способ удалить строку 1 и уменьшить?

Ответы:


140

Сохраните метки из исходного файла следующим образом:

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),]

Это ответ на вопрос, который не задавали. Я думаю, это больше сбивает с толку, чем помогает.
U. Windl

13

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

dat <- tail(dat, -1)

Этого также можно добиться с помощью dplyrпакета Hadley Wickham .

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

7

Я не эксперт, но это тоже может сработать,

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

На самом деле это не работает, когда nrow(dat) == 1: Затем исходные данные сохраняются.
U. Windl

6

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


Это комментарий, а не ответ! Несмотря на это я не мог воспроизвести.
U. Windl
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.