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.
Добавить 'with = FALSE' там. – A5C1D2H2I1M1N2O1R2T1