For循环根据条件在输出中生成一系列数据帧

时间:2014-05-06 06:33:34

标签: r for-loop

我从现有的类似问题中得到了解释:1)for循环很慢,2)输出到列表然后制作数据帧比直接输出到数据帧更好。

尽管如此: 所以我有一堆NIBRS / UCR(基于事件的统一犯罪报告)数据。我想创建50个新的列表/数据帧/表,每个列表/数据框/表按州分隔数据。

数据是:

Date   CrimeDataField1  CDF2  CDF3   etc   State.Abbrev.
xxx          xxx         xxx   xxx   xxx       xxx

我对for循环的笨拙尝试:

for(i in unique(State.Abbrev.)){
+ i.allyrs<-HCtest1[State.Abbrev.=="i",]}

感谢您的帮助!

编辑:我应该补充一点,这里的目标是每个新的数据帧按理想情况下应该命名为AbbreviationforthatState.allyrs,我想通过我的单一方式以这种方式处理输出和命名。环。也许不聪明?

1 个答案:

答案 0 :(得分:1)

您可以使用内置的split功能:

x = data.frame(num = 1:26, let = letters, LET = LETTERS)
set.seed(1)
split(x, sample(rep(1:2, 13)))
split(x, x$let)

在你的情况下可能是

list_of_dfs = split(HCtest1,HCtest1$State.Abbrev.)

顺便说一句,for循环并不坏,因为它在for循环中扩展数据是坏的。如果你可以预先分配那么它就不那么糟糕了(只是不那么漂亮)。

看一下R Inferno,它可以让您深入了解R的工作方法(它是变更复制品),并且假设您开始this link

编辑:命名列表:

names(list_of_dfs) = paste("MyName",1:length(list_of_dfs),sep="*")