#r
Вопрос:
У меня есть фрейм данных:
ID user study var varb varc varf
101 a b 3 4 3 4
102 b a 4 5 5 6
103 g a 4 4 5 6
104 b c 6 7 7 5
Я пытаюсь удалить первые три столбца, используя позиции индекса
df <- df[-c(1:3)]
Я был уверен, что этот метод работает для удаления столбцов. На самом деле, когда я впервые запустил эту строку, она работала так, как ожидалось, но теперь все, что она делает, — это удаляет строки вместо столбцов. Теперь я просто использую subset()
метод удаления столбцов, который отлично работает. Но я хочу освежить свой R, так как я заржавел после того, как так долго не писал в нем. Где я ошибся с оригинальным методом, который использовал раньше?
Комментарии:
1. Что
class(df)
возвращается? Ноdf[, -c(1:3)]
, вероятно, это сработало бы.2. Он возвращает два значения: data.table и data.frame
3. Смотрите первый раздел в
data.table
часто задаваемых вопросах 2.17, Каковы меньшие синтаксические различия междуdata.frame
иdata.table
Ответ №1:
Если это a data.table
, нам может понадобиться
df[, -c(1:3), with = FALSE]
Или, возможно, использовать select
из dplyr
library(dplyr)
df %>%
select(-(1:3))
Комментарии:
1. Я думаю, что вы правы.
class(df)
возвращает два классаdata.table
anddata.frame
, но я думаю, что он действует как первый. Запуск первого метода делает то, что я хотел. Я думаю, что это был вопрос класса. Я просто выбрал первый метод, который запомнил, и даже не подумал проверить.2. @AcidCatfish у вас может быть несколько атрибутов для класса, т. е. data.таблица построена поверх data.frame, которая будет обладать некоторыми свойствами data.frame с измененными свойствами из data.table. Это первый класс, то есть выдающийся
3. ,@ akrun: Это сработает?
data.frame(df[-c(1:3)])
4. @TarJae, я думаю
data.frame
, что вызов должен бытьas.data.frame(df)[-(1:3)]
вызван тем, что ваше подмножество выполняется внутриdata.table
, а не после преобразования вdata.frame
5. От
data.table v1.9.8
, вам не нужно использоватьwith=FALSE