2016-01-14 3 views
0
install.packages('data.table') 
library(data.table) 

data <- read.csv("http://www.ats.ucla.edu/stat/data/hsb2_small.csv") 
head(data, 10) 

    > id female race ses schtyp prog read write math science socst 
    > 1: 70  0 4 1  1 1 57 52 41  47 57 
    > 2: 121  1 4 2  1 3 68 59 53  63 61 
    > 3: 86  0 4 3  1 1 44 33 54  58 31 
    > 4: 141  0 4 3  1 3 63 44 47  53 56 
    > 5: 172  0 4 2  1 2 47 52 57  53 61 
    > 6: 113  0 4 2  1 2 44 52 51  63 61 
    > 7: 50  0 3 2  1 1 50 59 42  53 61 
    > 8: 11  0 1 2  1 2 34 46 45  39 36 
    > 9: 84  0 4 2  1 1 63 57 54  58 51 
    > 10: 48  0 3 2  1 2 57 55 52  50 51 

и мы видим, что этоПодгруппа по индексу столбца в R - Data.Table против dataframe

class(data) 

    > [1] "data.frame" 

поэтому мы можем зацепиться конкретные столбцы (показывая только 10 строк, например этой страницы .. .)

data[ , c(1, 7, 8)] 

    >  id read write 
    > 1 70 57 52 
    > 2 121 68 59 
    > 3 86 44 33 
    > 4 141 63 44 
    > 5 172 47 52 
    > 6 113 44 52 
    > 7 50 50 59 
    > 8 11 34 46 
    > 9 84 63 57 
    > 10 48 57 55 

или диапазон (полезно, если у вас есть много переменных)

data[ , 3:11] 

    > race ses schtyp prog read write math science socst 
    > 1  4 1  1 1 57 52 41  47 57 
    > 2  4 2  1 3 68 59 53  63 61 
    > 3  4 3  1 1 44 33 54  58 31 
    > 4  4 3  1 3 63 44 47  53 56 
    > 5  4 2  1 2 47 52 57  53 61 
    > 6  4 2  1 2 44 52 51  63 61 
    > 7  3 2  1 1 50 59 42  53 61 
    > 8  1 2  1 2 34 46 45  39 36 
    > 9  4 2  1 1 63 57 54  58 51 
    > 10 3 2  1 2 57 55 52  50 51 

Все работает хорошо, пока я не начну использовать data.table.

setDT(data) 
class(data) 

    > [1] "data.table" "data.frame" 

Как я выполнить подобную Подменю с data.table? тот же код выше, дает ...

data[ , c(1, 7, 8)] 

    > [1] 1 7 8 

data[ , 3:11] 

    > [1] 3 4 5 6 7 8 9 10 11 

Я знаю dplyr выберите(), но я ищу решение, которое не предполагает вводить имена столбцов, и был бы весьма признателен четкий метод Подменю data.table, используя «номер столбца». Я иногда использовал подмножество() и даже дошел до построения символьного вектора J для использования в данных [I, J, by = K]. Я должен что-то упустить. Руководители кода рассматривали бы это тривиальное и легко отображали бы гибкое решение, позволяющее, например, выбирать столбцы 1,3,5, 10 -30 и 97.

+3

Добавить 'with = FALSE' там. – A5C1D2H2I1M1N2O1R2T1

ответ

1

Для таблицы данных вам необходимо включить = FALSE в выражении подмножества столбцов.

data[, 3:11, with=FALSE] 
Смежные вопросы