R - 基于一列单元格值的矩阵子集

时间:2014-10-13 13:32:13

标签: r split subset

您好

我有X用户和7列的矩阵(is.matrix(users)= TRUE)。第一列表示具有0或1的公/母。如何将该矩阵分成两个新矩阵。一个与所有男孩分数和一个与所有女孩分数。

我有

USERS

所有用户

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

我需要

BOYS

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

GIRLS

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

2 个答案:

答案 0 :(得分:0)

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

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

如果您需要再次使用矩阵:

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

答案 1 :(得分:0)

您可以尝试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))