2010-08-13 86 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