【问题标题】:Subset by column index in R - Data.Table vs. dataframe [duplicate]R中的列索引子集-Data.Table与数据框[重复]
【发布时间】:2016-04-20 07:58:09
【问题描述】:
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

我们看到它是一个

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 select() 但我寻求一种不涉及键入列名的解决方案,并且非常感谢使用“列号”对 data.table 进行子集的明确方法。我偶尔会使用子集(),甚至构建字符向量 J 用于数据[I,J,by = K]。我肯定错过了什么。代码大师会认为这是微不足道的,并且很容易展示一个灵活的解决方案,例如,可以选择第 1、3、5、10 到 30 和 97 列。

【问题讨论】:

  • 在里面添加with = FALSE。

标签: r dataframe data.table subset


【解决方案1】:

对于 data.table,您需要在列子集语句中包含 with=FALSE。

data[, 3:11, with=FALSE]

【讨论】:

    猜你喜欢
    • 2015-03-21
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多