2010-08-13 37 views
0

我有一個數據框,其中包含一個定量變量x和幾個不同的因子f1,f2,...,fn。因素水平的數量並不是固定的。如何在R中對腳本進行腳本編程

我想通過因子級別fi創建一個(單)密度x的密度圖。

我知道如何爲特定的因素手動編寫代碼。例如,這裏是有兩個層次的因素的圖。

# set up the background plot 
plot(density(frame$x[frame$f1=="level1"])) 

# add curves 
lines(density(frame$x[frame$f1=="level2"])) 

我也能做到這一點,像這樣:

# set up the background plot 
plot(NA) 

# add curves 
lines(density(frame$x[frame$f1=="level1"])) 
lines(density(frame$x[frame$f1=="level2"])) 

我想知道什麼是我該怎麼辦,如果我只指定的因素作爲輸入。我甚至不知道如何編寫一個可以做我需要的for循環,而且我覺得'R方式'可以避免循環。

獎勵:對於繪圖,我想指定軸的極限值。現在我這樣做:

xmin=min(frame$x[frame$f1=="level1"],frame$x[frame$f1=="level2"]) 

如何在腳本中包含此類型的計算?

回答

3

我假設你的數據格式(數據幀稱爲df

f1  f2  f3  fn  value 
    A........................... value 1 
    A............................value 2 
    ............................. 
    B............................value n-1 
    B............................value n 

在這種原因,晶格(或GGPLOT2)將是非常有用的。

library(lattice) 

densityplot(~value, groups = f1, data = df, plot.points = FALSE) 

這應該讓你接近你在找什麼,我想。

格雷格

+0

偉大的作品!非常感謝! – 2010-08-13 21:07:35

+0

你可能想要添加auto.key = TRUE作爲密度圖的參數。 – Greg 2010-08-13 21:18:09

+0

也非常感謝。偉大的指針! – 2010-08-13 21:40:40

1

你也可以這樣做:

# create an empty plot. You may want to add xlab, ylab etc 
# EDIT: also add some appropriate axis limits with xlim and ylim 
plot(0, 0, "n", xlim=c(0, 10), ylim=c(0, 2)) 
levels <- unique(frame$f1) 
for (l in levels) 
    { 
    lines(density(frame$x[frame$f1==l])) 
    } 
+0

謝謝,尼科!很棒。我很欣賞看到如何以這種方式使用for循環。 – 2010-08-13 21:12:48

1

ggplot2代碼

library(ggplot2) 
ggplot(data, aes(value, colour = f1)) + 
    stat_density(position = "identity") 
+0

謝謝,JoFrhwld。我聽說過ggplot2,並且一直想了解更多。我喜歡這些命令的標籤方式。 – 2010-08-13 21:38:34