我想为我的数据集的特定子集绘制内核密度。子集将由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)
如果我这样做,则需要为数据集中的每种材料编写以上代码。有没有一种更优雅的编码方式,使得我可以得到每种材料的密度图,或者我需要按计划将其分解为每种材料? ...因为我的数据集中有3种以上的材料。 谢谢!
答案 0 :(得分:1)
要获得密度,一种简单的方法是使用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)
}
数据创建代码。
set.seed(1234)
dat <- data.frame(char_var = rep(LETTERS[1:4], each = 10),
k_var = rnorm(40))