2011-11-16 185 views
0

我在寻找79列,并为每列创建一个唯一变量。 我可以手动创建子集的变量:将列分隔为变量

v1 <- x[1] 
    v2 <- x[2] 
    etc. 

我想知道是否/知道有一个更快的方法来做到这一点。我只是不确定如何。 现在我有:

test <- matrix(rep(1,79), nrow = 1, ncol = 79) 
    c2v <- function(test){ 
     for (i in c(1:79){ 
      v[i] <- test[i] 
     } 
     return(v[i]) 
    } 
    c2v(test) 

感谢一如既往的帮助!

乔恩

+0

这个问题需要一些认真的工作。除了使你编写的代码变得毫无意义的拼写错误,你需要提供一个更完整的解释,说明你正在努力完成什么以及为什么。 – joran

回答

2

什么是这样的:

test <- matrix(rep(1,79), nrow = 1, ncol = 79) 

for (i in 1:ncol(test)) { 
    temp <- (paste(c("v",i), collapse="")) 
    assign(temp,test[i]) 
} 

我敢肯定,它可以被重新配置,以摆脱循环的,但这应该工作。

未来我编辑我过去的错误:

像下面可能是一个更适当的非循环方案。

list2env(as.data.frame(test),envir=.GlobalEnv) 

它可能仍然是更好的做法与data.framelist工作比分手个别载体。

+0

矢量化矢量化矢量化。 R中的循环效率非常低。 – Maiasaura

+0

@Maiasaura - 我意识到这一点,但我不能为我的生活考虑如何在这个阶段删除循环。我在做这个工作。 – thelatemail

+2

担心避免'for'循环可以像其他任何事情一样被过度使用。作为练习很有趣,但在这种情况下,我怀疑值得强调的仅仅是79列的循环。 – joran

0
library(reshape) 
    new_data= melt(data, id.vars=1) 
    # Assuming the first column is the ID variable. 
    #If you have more than one, you can specify a range like 1:4