【问题标题】:R - Subset of matrix based on cell value of one columnR - 基于一列单元格值的矩阵子集
【发布时间】:2014-12-08 02:12:42
【问题描述】:

你好

我有这个包含 X 个用户和 7 列的矩阵 (is.matrix(users)=TRUE)。第一列用 0 或 1 表示男性/女性。如何将此矩阵拆分为两个新矩阵。一个是所有男孩的分数,一个是所有女孩的分数。

我有

用户

所有用户

         sex     intelligence   ...    status  
user1      0             1234   ...       ...
user2      1             5678   ...       ...
user3      1             8765   ...       ...
...      ...              ...   ...       ...
userX      0             4321   ...       ...

我需要

男孩们

         sex     intelligence   ...    status  
user2      1             5678   ...       ...
user3      1             8765   ...       ...

女孩

         sex     Intelligence   ...    status  
user1      0             1234   ...       ...
userX      0             4321   ...       ...

【问题讨论】:

    标签: r split subset


    【解决方案1】:

    您可以将矩阵转换为数据框并将其子集

    df <- as.data.frame(users)
    girls <- df[df$sex == 0, ]
    boys <- df[df$sex == 1, ]
    

    如果再次需要矩阵:

    girls <- as.matrix(girls)
    boys <- as.matrix(boys)
    

    【讨论】:

    • 我想将其保留为矩阵和向量,因为我听说对于大型数据集,使用它应该比数据帧更快
    • 如果你使用非常大的数据集,我建议你使用data.tablemore info
    • @adomasb 我猜你不需要转换/重新转换为 data.frame。 indx &lt;- !mat1[,"sex"]; mat1[indx,]; mat1[!indx,]mat1 来自我的例子)
    • 是的,绝对没有必要,但是,有数百种方法:)。我只将矩阵类用于矩阵乘法,我更喜欢data.table(以前的data.frame),因此我使用了data.frame 方法。
    【解决方案2】:

    你可以试试split

    lst <- setNames(lapply(split(1:nrow(mat1), mat1[,"sex"]), function(i) mat1[i,]), c("GIRLS", "BOYS"))
    

    如果您需要两个数据集而不是将其保存在列表中(我希望将其保存在列表中)

     list2env(lst, envir=.GlobalEnv)
     <environment: R_GlobalEnv>
     GIRLS
     #      sex intelligence
     #[1,]   0         1236
     #[2,]   0         1241
    
    
     BOYS
    

    数据

     set.seed(42)
     mat1 <- as.matrix(data.frame(sex=sample(0:1, 10, replace=TRUE), intelligence=1234:1243))
    

    【讨论】:

      猜你喜欢
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多