繁体   English   中英

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

[英]R - Subset of matrix based on cell value of one column

嗨,您好

我有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   ...       ...

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

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

如果再次需要矩阵:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM