我从现有的类似问题中得到了解释: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,我想通过我的单一方式以这种方式处理输出和命名。环。也许不聪明?
答案 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="*")