2015-10-17 53 views
0

我有一个空数据框的列表(xlistx0:x10。我也有填充数据帧y(约13,000行)。所有的数据框都有列数和列标题。将行添加到列表中的数据框

y Date Time Correct Incorrect Average Score EC E1? E2? E3? 
[1] 10/1 1:14  8   2   15  80 0 y n y 
[2] 10/2 8:45  5   5   12  50 1 n y y 

我想要的y每一行复制到dataframes之一xlist

for (i in 1:nrow(y)) { 
    xlist(paste0("x",y[i,3])) <- rbind(xlist(paste0("x",y[i,3])), y[i,])) 
} 

基本上,基于在“正确”列中的数字,我想该行复制到在xlist相应数据帧(因此第一行到x8,第二至x5)。

与dataframes名单的问题是,它不读他们作为dataframes这里

> class(xlist[x1]) 
[1] "list" 

,但它是在环境面板

xlist list of 11 
x0: 'data.frame' 0 obs of 10 variables: 
..$ etc 
x1: 'data.frame' 0 obs of 10 variables: 
..$ etc 
etc 

使用上面的复制代码抛出“数要替换的项目不是替换长度的倍数。“一些重写已经得到“参数列数不匹配”(不知道如何)。所以,我想创造我自己的AddRow功能,看是否rbind是问题:

AddRow <- function(DF,NewRow) { 
    DF[nrow(DF) + 1] <- NewRow 
    DF 
} 

但它抛出一个“标不正确的#矩阵”的错误。

我怎样才能将y的所有行复制到xlist的相应数据框中?

回答

0

我没有弄清楚确切的答案,但我想出了一个更有效的解决方法,因为迭代后我不再需要列表(而是实际的x数据框本身)。我发现了sqldf软件包。

通过不使用框架列表,我得到了我需要的列表。

for (i in 0:10) { 
    assign(paste0("x",i), 
      sqldf(paste0("select * from y where Correct = ", i))) 
} 

这将创建11个dataframes,命名为x0通过x10,每通过SQL查询autopopulated。

+0

'split(y,y $ Correct)'将数据帧'y'分割成数据帧列表,每个数据帧都有一个单独的值'Correct'。 –