2017-08-07 162 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

它確實解決了我的問題。非常感謝您的幫助。讚賞。 –