我是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 "=="
我做错了什么。
答案 0 :(得分: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)
}