这是我制作的一个简单数据集:
test <- data.frame(
ID=1:10,
group=c(3,2,1,3,3,3,4,1,3,3),
height=c(156,167,165,187,153,172,178,191,155,189)
)
看看每组中有多少人:
> table(test$group)
1 2 3 4
2 1 6 1
然后我做了一个箱线图
boxplot(test$height~test$group)
正如你所看到的那样,第2组和第4组中只有一个人。我想在进行箱形图时将它们排除在外。换句话说,对有多个观察的群体进行绘图吗?
我知道子集函数,并认为这可能有用,但不确定如何在这种情况下最好地应用它。
答案 0 :(得分:3)
您可以使用transform()
和ave()
添加一个列,指示每个组中有多少观察结果,然后使用subset()
参数仅保留多于1个观察者的观察结果。例如
boxplot(height~group,
transform(test, groupcount=ave(ID, group, FUN=length)),
subset=groupcount>1)
请注意,使用公式语法时,只能使用subset=
boxplot()
参数。
答案 1 :(得分:2)
我喜欢dplyr这些东西
library(dplyr)
test %>% group_by(group) %>%
filter(n() > 1) %>%
boxplot(height~group, .)
答案 2 :(得分:1)
你可以这样做:
tab <- as.data.frame(table(test$group))
tab1 <- tab[which(tab$Freq > 1),]
test2 <- test[which(test$group %in% tab1$Var1),]
boxplot(test2$height~test2$group)