基于r中不同行组的子集数据帧

时间:2014-03-27 09:21:26

标签: r for-loop subset

20小时后没有得到答案!我想我必须简化我的问题:

我有104个文件(我将它们全部放在一个数据框中)。每个文件有6列。第一列可分为50组。每个文件对这50个组中的每个组都有不同的记录数。我只需要保存1000条记录。我尝试了嵌套的for循环,但它不起作用。


大家好日子。我想知道是否有人可以帮助R编程新手。我必须排序一个包含4911703行(obs。)的6个变量的巨大文件。

Kindly, you can download a brief scheme of this data frame here

数据框有6列{V1,V2,V3,V4,V5,V6}

在此文件中,V1有50个不同的数字,分别称为主题(451,452,...,500),V6有104个不同的系统名称。 V6中的每个系统对V1中的每个数字(主题)都有大约1000条记录。例如451的1000条记录,452条的1000条记录,依此类推。我必须对此数据框进行排序。我在plyr包中使用arrange()做到了这一点。因此,其中一列“V4(rank)”未被排序,我必须通过添加一个名为“new_rank”的新列来重新排名数据。我使用'嵌套'进行重新排名。

for(i in 1:50){
   for(i in 1:?)
    clean_file["newRank"] <- 0:1000
} 

问题:遗憾的是,V1中每个主题的系统记录并不相同。一个系统可能有4545个记录,而另一个系统可能有1345个记录。所以,我在第二个'for'中遇到了问题。 由于我只需要为V1中的每个主题创建1000条记录,因此我尝试在重新排名之前对数据框进行子集化。但我不知道怎么做!换句话说,对于V6 [104 x 1000 x 50]中的每104个系统,我希望V1中的每个主题只有1000条记录。我想知道是否有人可以帮我解决这个问题。谢谢你提前。

PS我通过list.files和ldply(file,readt.table)读取104个文件来制作这个巨大的文件。我试图在多个数据帧而不是一个数据帧中读取这104个文件,但我再次遇到了失败的问题。

1 个答案:

答案 0 :(得分:0)

您可以使用data.table包在一行中完成。假设“数据”是您的数据集,并且您希望按以下顺序订购数据V2 - &gt; V3 - &gt; V4 - &gt; V5 - &gt; V6(您可以在order()函数中将顺序更改为您喜欢的任何内容),然后您应该这样做:

library(data.table)
shortdata <- as.data.frame(data.table(data)[order(V2, V3, V4, V5, V6), head(.SD, 1000), by = "V1"])