2014-01-09 1 views
1
tmp1 <- data.frame(x = 10, y = NA, z = NA) 

Фактические:Различие в методах Подменят кадр данных

> tmp1[ ,!is.na(tmp1)] 
[1] 10 

Желательное:

> tmp1[ ,!is.na(tmp1)] 
    x 
1 10 

Pfft, почему?

> tmp1[-c(2:3)] 
    x 
1 10 

grumblegrumblegrumble

> tmp1[ ,-c(2:3)] 
[1] 10 

Я уверен, что R делает именно то, что я спрашиваю, но это не делает именно то, что я хочу :)

ответ

3

Когда вы задаете только один столбец of data.frame, R дает вам атомный вектор, ЕСЛИ вы укажете, что хотите сохранить результат как data.frame:

tmp1[,-(2:3),drop=F] 

Также следует отметить:

  • 2:3 уже вектор, так что вам не нужно c(2:3), но вам не нужно -(2:3) распространять отрицательный знак.
  • tmp1[-c(2:3)] немного запутан, потому что data.frames также являются списками. Это означает удаление второго и третьего элементов списка tmp1, которые являются столбцами. Я бы избегал таких обозначений, но это зависит от вас.
+0

Я должен был посмотреть в '? '[' 'Не'? Data.frame' ... моя ошибка – rawr

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