2017-08-07 139 views
1

我R中颇有新意的时候,试图找到我为什么围绕创建数据帧的一个子集。我已经基于“原始”数据框创建了一个新的数据框。运行循环

library(dplyr) 
prdgrp <- as.vector(mth['MMITCL']) 
prdgrp %>% distinct(MMITCL) 

当这样做时,结果是列MMITCL的唯一值列表。我想,首先创建原始数据的新的子集和打印基于此图的环序列使用该资料:

#START LOOP 
for (i in 1:length(prdgrp)) 
{ 
# mth[c(MMITCL==prdgrp[i],] 
mth_1 <- mth[c(mth$MMITCL==prdgrp[i]),] 
# Development of TPC by month 
library(ggplot2) 
library(scales) 
ggplot(mth_1, aes(Date, TPC_MTD))+ geom_line() 
} 
# END LOOP 

这样做给了我以下错误信息:

Error in mth$MMITCL == prdgrp[i] : 
    comparison of these types is not implemented 
In addition: Warning: 
I `[.data.frame`(mth, c(mth$MMITCL == prdgrp[i]),) : 
    Incompatible methods ("Ops.factor", "Ops.data.frame") for "==" 

我在做什么错。

回答

1

如果你只是要绘制的输出也没有必要到子集数据框,它是简单的只是把ggplot在一个循环(或者更可能使用facet_wrap)。没有看到你的数据,要给你一个确切的答案有点难。不过下面还有两个通用的虹膜例子 - 希望这些也将显示在您的子所做的错误设置你的数据帧。请让我知道,如果你有任何问题。

library(ggplot2) 

#looping example 
for(i in 1:length(unique(iris$Species))){ 
    g <- ggplot(data = iris[iris$Species == unique(iris$Species)[i], ], 
       aes(x = Sepal.Length, 
        y = Sepal.Width)) + 
    geom_point() 
    print(g) 
} 

#facet_wrap example 
g <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) + 
    geom_point() + 
    facet_wrap(~Species) 
g 

不过,如果你需要保存的数据帧以备后用,一个选择是将它们放到一个列表。如果你只需要在循环中保存数据帧,你可以删除列表并使用你想要的任何变量名称。

myData4Later <- list() 

for(i in 1:length(unique(iris$Species))){ 
    myData4Later[[i]] <- iris[iris$Species == unique(iris$Species)[i], ] 
    g <- ggplot(data = myData4Later[[i]], 
       aes(x = Sepal.Length, 
        y = Sepal.Width)) + 
    geom_point() 
    print(g) 
} 
+0

是你是对的。我没加什么,我希望这样做,因为我也做霍尔特 - 温特预测对数据的完整代码后,我希望如此商店。我的appoligies不包括这个。 –

+0

以上的增加是否回答你的问题?你的问题的一部分是当你在[]中使用c()的数据的子集。可能还有其他问题,但您需要发布最低工作示例。 –

+0

它确实解决了我的问题。非常感谢您的帮助。赞赏。 –