как написать в R на уровнях фактора - PullRequest
0 голосов
/ 13 августа 2010

У меня есть фрейм данных с количественной переменной x и несколькими различными факторами, f1, f2, ..., fn.Количество уровней не является постоянным для разных факторов.

Я хочу создать (один) график плотности x по уровню фактора fi.

Я знаю, как передать код для конкретного фактора.Например, вот график для коэффициента с двумя уровнями.

# 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 ]

3 голосов
/ 14 августа 2010

Я предполагаю, что ваши данные в формате (фрейм данных называется 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)

Это должно приблизить вас к тому, что вы ищете, я думаю.

Грег

1 голос
/ 14 августа 2010

ggplot2 код

library(ggplot2)
ggplot(data, aes(value, colour = f1)) +
  stat_density(position = "identity")
1 голос
/ 14 августа 2010

Вы также можете сделать:

# 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]))
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...