运行循环
问题描述:
我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 "=="
我在做什么错。
答
如果你只是要绘制的输出也没有必要到子集数据框,它是简单的只是把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)
}
是你是对的。我没加什么,我希望这样做,因为我也做霍尔特 - 温特预测对数据的完整代码后,我希望如此商店。我的appoligies不包括这个。 –
以上的增加是否回答你的问题?你的问题的一部分是当你在[]中使用c()的数据的子集。可能还有其他问题,但您需要发布最低工作示例。 –
它确实解决了我的问题。非常感谢您的帮助。赞赏。 –