【发布时间】:2012-07-24 11:32:00
【问题描述】:
问题来了
我有一个我 read.csv() 的 csv 文件,并打印到:
grp b a id d c
1 grp1 2 1 id3 3 2
2 grp1 -2 1 id1 3 2
3 grp0 -2 1 id4 3 2
4 grp0 1 1 id0 3 2
5 grp0 1 1 id2 3 2
现在我想将其拆分为两个数据帧,一个包含grp1 的数据,另一个包含grp2 的数据
groups <- split(raw, raw$grp);
产生这个:
$grp0
grp b a id d c
3 grp0 -2 1 id4 3 2
4 grp0 1 1 id0 3 2
5 grp0 1 1 id2 3 2
$grp1
grp b a id d c
1 grp1 2 1 id3 3 2
2 grp1 -2 1 id1 3 2
现在我只想要这些列表中的a,b,c,d 行,所以我需要将它们强制转换为数据框以使用subset(),这意味着我需要:
for(i in 1:length(groups))
{
x <- subset(as.data.frame(groups[i]), select = c(a,b,c,d));
some_function(x);
}
问题是,当我这样做时,它说 a 列不存在,而当我将这些东西打印出来时,我们看到的是:
grp0.grp grp0.b grp0.a grp0.id grp0.d grp0.c
3 grp0 -2 1 id4 3 2
4 grp0 1 1 id0 3 2
5 grp0 1 1 id2 3 2
grp1.grp grp1.b grp1.a grp1.id grp1.d grp1.c
1 grp1 2 1 id3 3 2
2 grp1 -2 1 id1 3 2
因此,这些列不再只是 a、b、c、d,而是在拆分期间创建的名称前面加上它们的名称。他们是我可以避免这种情况发生的一种方式吗?或者有没有办法获取数据框的名称并将其添加到我正在设置子集的元素列表中?我只想得到看起来像这样的数据框,列名不必准确:
$grp0
b a d c
3 -2 1 3 2
4 1 1 3 2
5 1 1 3 2
$grp1
b a d c
1 2 1 3 2
2 -2 1 3 2
【问题讨论】: