2015-05-17 2 views
0

Мне нужно просто исключить набор столбцов из моего data.table. Я могу сделать это с помощью -c() с номерами этих столбцов:Подмножество data.table, за исключением некоторых столбцов

dti <- data.table(iris) 
dti1 <- dti[, -c(3,5), with=F] 

, но я хотел бы использовать имена столбцов вместо цифр, что-то вроде

colsExcl <- c('Petal.Length', 'Species'); 
dti1 <- dti[, -c(colsExcl), with=F] # error: invalid argument to unary operator 
+1

Это работает для меня без любая ошибка. – Metrics

+1

@Метрики, правда? Какую версию «data.table» вы используете? – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto: Я использую 1.9.5. – Metrics

ответ

1

Вы можете попробовать setdiff или := NULL, но поведение отличается.

С setdiff, вы должны назначить выход к другому объекту:

colsExcl <- c('Petal.Length', 'Species') 
dti1 <- dti[, setdiff(names(dti), colsExcl), with = FALSE] 

В противоположность этому, используя := NULL удаляет столбцы из исходного data.table:

dti[, (colsExcl) := NULL][] 
#  Sepal.Length Sepal.Width Petal.Width 
# 1:   5.1   3.5   0.2 
# 2:   4.9   3.0   0.2 
# 3:   4.7   3.2   0.2 
# 4:   4.6   3.1   0.2 
# 5:   5.0   3.6   0.2 
# ---          
# 146:   6.7   3.0   2.3 
# 147:   6.3   2.5   1.9 
# 148:   6.5   3.0   2.0 
# 149:   6.2   3.4   2.3 
# 150:   5.9   3.0   1.8 
+1

ах, я просто хотел избежать использования 'names (dti)' ... Но я пропустил решение с помощью:: = NULL', и на самом деле я могу избежать изменения исходной таблицы с помощью 'copy()', например: 'dti1 <- copy (dti) [, (colsExcl): = NULL]'. Спасибо за оба решения! –

Смежные вопросы