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

86

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

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

AKZ
источник

Ответы:

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),]
пользователь3495945
источник
Это ответ на вопрос, который не задавали. Я думаю, это больше сбивает с толку, чем помогает.
U. Windl
13

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

dat <- tail(dat, -1)

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

dat <- dat %>% slice(-1)
EMcKinney
источник
7

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

dat <- dat[2:nrow(dat), ]
Бипул Моханто
источник
На самом деле это не работает, когда nrow(dat) == 1: Затем исходные данные сохраняются.
U. Windl
6

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

кардамон
источник
Это комментарий, а не ответ! Несмотря на это я не мог воспроизвести.
U. Windl