2013-06-26 46 views
1

我看着互聯網和本網站,但我沒有找到解決方案,所以對不起,如果我的問題已經得到解答。 我有一個數據幀,其中幾行具有相同的ID。比方說,例如對於多情節循環

ID Value1 Value2 
P1 12  3 
P1 15  4 
P22 9  12 
P22 15  14 
P22 13  9 
P30 10  12 

是否可以編寫一個腳本,把數據幀和情節在不同的頁面值1〜值2,對於每一個不同的ID?換句話說,我會有3個圖,其中value1對P1,P22和P30的值爲2。

我嘗試寫的腳本來回路(但我真的牛逼的R):

for (i in levels(dataset$ID)) { 
plot(dataset[i,2], dataset[i,2]) 
} 

但我收到錯誤:

Errore in plot.new() : figure margins too large 
Warning messages: 
1: In min(x) : no non-missing arguments to min; returning Inf 
2: In max(x) : no non-missing arguments to max; returning -Inf 
+0

你必須聲明'圖(數據集[I,2],數據集[I,2]'必須是一個打字錯誤 - 你打印的數據是「對自己」,所以你最好畫一條直線,也不要關閉'plot'命令的圓括號,你能檢查和編輯嗎? – Floris

回答

4

我會通過ID在這裏使用by,將你的數據。另請注意,我使用標題的ID。如果你沒有很多身份證,也許是一個方面的方法,那麼起訴一個更高層次的情節包,如@Roman所示在這裏更好。

by (dataset,dataset$ID,function(i){ 
    plot(i$Value1,i$Value1,main=unique(i$ID)) 
}) 

還要注意這不收拾你「Errore」(我猜西班牙語錯誤)

Errore in plot.new() : figure margins too large 

通常當我得到這個錯誤,與RStudio,我擴大我的情節區域。否則,你總是可以設置使用類似的情節保證金,調用劇情循環之前:

par(mar=rep(2,4)) 
+0

我試過了,但是返回:Errore in plot.new():figure margins too large – matteo

+0

@matteo你可以看到我的編輯,我爲你的錯誤添加解釋。 – agstudy

+0

謝謝,它完美的工作! – matteo

2

我會不喜歡它這個。

mydf <- data.frame(id = sample(1:4, 50, replace = TRUE), var1 = runif(50), var2 = rnorm(50)) 

library(ggplot2) 
ggplot(mydf, aes(x = var1, y = var2)) + 
    theme_bw() + 
    geom_point() + 
    facet_wrap(~ id) 

enter image description here

2

這不是我清楚你所說的「在不同的頁面」的意思。 PDF的頁面?然後在評論中運行代碼。

DF <- read.table(text="ID Value1 Value2 
P1 12  3 
P1 15  4 
P22 9  12 
P22 15  14 
P22 13  9 
P30 10  12",header=TRUE) 


#pdf("myplots.pdf") 
for (i in levels(DF$ID)) { 
    plot(Value1 ~ Value2,data=DF[DF$ID==i,]) 
} 
#dev.off()