使用另一个变量创建数据框的R箱图

时间:2016-12-27 17:38:40

标签: r boxplot

我正在寻找创建一组箱形图,我在samplesf1中针对samplingf2中的单个变量创建每个变量的bloxplot。

实际用例是我创建了一组带有k-means的集群,现在想要查看每个找到的集群的分布情况,以及我用于集群的数据帧中的每个变量。

sampledf1 <- as.data.frame(replicate(6, sample(c(1:10,NA))))
sampledf2 <- as.data.frame(replicate(1, sample(c(21:30,NA))))

然后我想看一个boxf图,其中samplesf1中的每个变量与samplesf2中唯一的变量配对。

我想使用类似的东西:

sapply(boxplot(sampledf1~sampledf2$V1))

但这给了我这个错误:

  

match.fun(FUN)出错:缺少参数“FUN”,没有默认值

无论如何,我能做到这一点,dplyr会很棒,但我没有看到任何可以链接在一起的功能。

4 个答案:

答案 0 :(得分:3)

以下是使用lapplyseq_along的方法。我们使用sampledf1遍历seq_along列。我们可以使用索引inames函数提取变量名称。

par(mfrow = c(2,3))
lapply(seq_along(sampledf1), 
       FUN  = function(i) 
           boxplot(sampledf1[,i] ~ sampledf2$V1, main = names(sampledf1)[i])
       )

enter image description here

答案 1 :(得分:2)

如果您首先将数据重新整形为长格式

,则可以使用ggplot和facets
library(reshape2)
library(ggplot2)
s.all = cbind(sampledf1, f2=sampledf2$V1)
s.long = melt(s.all, id = 'f2')
ggplot(s.long) +
  geom_boxplot(aes(x=f2, group=f2, y=value)) +
  facet_wrap(~variable) +
  scale_x_continuous(breaks=unique(s.long$f2))

enter image description here

答案 2 :(得分:1)

当你开始尝试传递这样的公式时,

library(purrr)的{​​{1}}很有效。 walk的作用类似walk(),迭代对象中的元素,只需更灵活的语法。 sapply引用.中的迭代元素。

这将使每个面板按names(sampledf1)中代表的列命名:

sampledf1

enter image description here

答案 3 :(得分:0)

ggplot2变体:

library(reshape2)
library(ggplot2)

sampledf1$X <- sampledf2$V1
ggplot(melt(sampledf1, id.vars="X", na.rm=T), aes(factor(X),value)) + 
  geom_boxplot() + facet_wrap( ~ variable, nrow=2)

enter image description here