将行添加到列表中的数据框架

时间:2015-10-17 19:54:18

标签: r list dataframe

我有一个空数据框xlist的列表(x0: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的每一行复制到xlist中的一个数据框中。

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

基本上,根据&#34;正确的数字&#34;我希望将该行复制到xlist中的相应数据框中(因此第一行为x8,第二行为x5)。

数据框列表的问题在于它没有将它们作为数据框读取

> 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

使用上面的复制代码抛出&#34;要替换的项目数不是替换长度的倍数。&#34;一些重写已经得到了#34;参数列数不匹配&#34; (不知道如何)。所以我尝试创建自己的AddRow函数来查看rbind是否是问题:

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

但它会在矩阵&#34;中抛出一个&#34;不正确的下标#错误。

如何将y的所有行复制到xlist中的相应数据框?

1 个答案:

答案 0 :(得分:0)

我没有弄清楚确切的答案,但我想出了一个更有效的解决方法,因为在迭代之后我不再需要该列表(而是实际的x数据帧他们自己)。我发现了sqldf包。

根本没有使用帧列表,我得到了我需要的列表。

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

这会创建11个数据框,名为x0x10,每个数据框都通过SQL查询自动填充。