R графические плотности ядра для подмножеств набора данных (условно для переменной char) - PullRequest
0 голосов
/ 06 мая 2019

Я хочу построить плотность ядра для определенных подмножеств моего набора данных. Подмножества должны быть идентифицированы с помощью переменной char. Мой набор данных имеет следующую структуру (не мой фактический набор данных, а общая структура):

Char_var    var1   var2  var3  k_var
Material A                      2
Material B                      5
Material C                      7
Material A                      8
Material C                      4
.                               .
.                               .
.                               .

var1, var2, var3 - другие двойники, но не обязательные для этого графика.

Вообще, я так закодировал это

dens1 <-  density(k_var) # How do I add an if statement for the Char_var here?
plot(dens1)

Если я сделаю это таким образом, мне потребуется написать код выше для каждого материала в моем наборе данных. Есть ли более элегантный способ кодирования, чтобы я получал графики плотности для каждого материала, или мне нужно разделить его для каждого материала, как я собирался сделать? ... поскольку в моем наборе данных содержится более трех материалов. Спасибо!

1 Ответ

1 голос
/ 06 мая 2019

Чтобы получить плотности, проще всего использовать петлю tapply.

dens <- tapply(dat$k_var, dat$char_var, density)

Теперь графики.Все эти плотности представлены на одном графике и должны рассматриваться только в качестве примера.

dx <- sapply(dens, function(d) range(d$x))
dy <- sapply(dens, function(d) range(d$y))

xlim <- c(min(dx[1, ]), max(dx[2, ]))
ylim <- c(min(dy[1, ]), max(dy[2, ]))

plot(0, type = "n", xlim = xlim, ylim = ylim, xlab = "", ylab = "")
for(i in seq_along(dens)){
  par(new = TRUE)
  plot(dens[[i]], main = "", col = i, xlab = "", xlim = xlim, ylim = ylim)
}

enter image description here

Код создания данных.

set.seed(1234)
dat <- data.frame(char_var = rep(LETTERS[1:4], each = 10),
                  k_var = rnorm(40))
...