我正在寻找创建一组箱形图,我在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会很棒,但我没有看到任何可以链接在一起的功能。
答案 0 :(得分:3)
以下是使用lapply
和seq_along
的方法。我们使用sampledf1
遍历seq_along
列。我们可以使用索引i
和names
函数提取变量名称。
par(mfrow = c(2,3))
lapply(seq_along(sampledf1),
FUN = function(i)
boxplot(sampledf1[,i] ~ sampledf2$V1, main = names(sampledf1)[i])
)
答案 1 :(得分:2)
如果您首先将数据重新整形为长格式
,则可以使用ggplot和facetslibrary(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))
答案 2 :(得分:1)
library(purrr)
的{{1}}很有效。 walk
的作用类似walk()
,迭代对象中的元素,只需更灵活的语法。 sapply
引用.
中的迭代元素。
这将使每个面板按names(sampledf1)
中代表的列命名:
sampledf1
答案 3 :(得分:0)