如何创建子集的矩阵/ 2D数组?

时间:2014-05-30 20:47:57

标签: arrays r

我想将数据子集化为2D数组或矩阵。这就是我尝试过的:

mat <- array(, c(3,3))

for(i in 1:3) {
  mat[i,1] <- subset(df, ...)
  mat[i,2] <- subset(df, ...)
  mat[i,3] <- subset(df, ...)
}

但我收到警告:number of items to replace is not a multiple of replacement length。这是正确的,还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果要根据特定条件或因素分割数据,可以使用拆分进行分割。假设你有

dd<-data.frame(
   a=runif(100),
   b=runif(100),
   c=sample(c("x","y","z"), 100, replace=T),
   d=sample(c("M","F"), 100, replace=T)
)

然后您可以使用

拆分数据
subs<-split(dd, dd$c)

制作一个包含三个元素的列表,其中第一个包含所有带“x”的行,第二个包含所有带“y”的行,第三个包含所有带“z”的行。您也可以使用变量组合

来完成此操作
subs<-split(dd, interaction(dd$c, dd$d))

然后,如果你愿意,你可以对每个子集或其他东西运行回归

reg <- lapply(subs, function(x) lm(b~a, x))
reg[[1]] #to see the results for the first group