来自Matrix的数据框具有索引

时间:2014-08-18 10:04:17

标签: r

我有一个矩阵,它具有数据帧的列索引。我想使用与索引对应的值构建另一个数据框,其顺序与矩阵中的顺序相同。

矩阵是m1 <- sapply(df[,5:58],function(x){order(-x)})的结果而创建的,其中df是具有258行和59列的原始数据帧。矩阵(258x54)是对数据帧的54列中的每一列进行独立排序的结果,因为我想创建一个数据帧,每列有前10个值。

如何从矩阵索引(m1)获取结果数据帧,矩阵索引将具有与原始数据帧(df)对应的值,但是按矩阵位置指定的顺序。 for循环可以是构建数据框的解决方案,但是有一个应用程序或其他函数来执行此操作吗?

我找到了一个使用mapply的解决方案:

matrix(mapply(function(x,y){df[x,y]},
               as.list(t(m1)),rep((5:58),258)),
       nrow=258,ncol=54,byrow=T)

1 个答案:

答案 0 :(得分:0)

假设,如果数据是(虽然我没有完全理解逻辑):

 set.seed(14)
 dat <- as.data.frame(matrix(sample(1:80, 258*59,replace=TRUE), ncol=59))
 m1 <- sapply(dat[,5:58], function(x) order(-x))
 res1 <-  matrix(dat[cbind(c(t(m1)),rep(5:58,258))],nrow=258, ncol=54, byrow=TRUE)

您的解决方案

 res2 <- matrix(mapply(function(x,y){dat[x,y]},
           as.list(t(m1)),rep((5:58),258)),
   nrow=258,ncol=54,byrow=T)

   identical(res1,res2)
  #[1] TRUE