2016-01-14 21 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對比數據框

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通過使用「列號」。我偶爾使用了subset(),甚至爲了在數據[I,J,by = K]中使用而構造字符向量J。我肯定錯過了什麼。代碼大師會考慮這個微不足道的,並容易顯示一個靈活的解決方案,允許一個,例如,選擇列1,3,5,10到30和97.

+3

在那裏添加'with = FALSE'。 – A5C1D2H2I1M1N2O1R2T1

回答

1

對於data.table,您需要包含=列子集語句中= FALSE。

data[, 3:11, with=FALSE]