如何分离数据框以绘制单独的直方图?

时间:2017-09-07 07:50:26

标签: r dataframe histogram

我的df如下所示:

screenshot

如何在一张图上为每个州绘制IndividualRate的直方图?我可以使用subset(),但由于有40多个州,因此必须采用更有效的方式。

3 个答案:

答案 0 :(得分:1)

修改

我总是忘记by,但它在这里要好得多,没有额外的库,更短,没有解决方法,你也得到了输出:

by(df1$data,df1$state,hist)

旧答案

您不需要创建单独的data.frames,您可以使用dplyrgroup_by

library(dplyr)
df1%>% group_by(state) %>% do({hist(.$data);tibble()})

do必须返回data.frame(或tibble),这就是我使用tibble()结束表达式的原因

数据

df1 <- data.frame(state = rep(c("a","b","c"),100),data=sample(1000,300))
head(df1)
#   state data
# 1     a  401
# 2     b  599
# 3     c   36
# 4     a  649
# 5     b  116
# 6     c  905

答案 1 :(得分:1)

正如Moody所指出的,如果可以使用分组来解决任务,则没有理由拆分data.frame。 data.table包允许执行任意代码。

# create sample data
set.seed(1L)
df1 <- data.frame(state = rep(LETTERS[1:3], 100), value = sample(1000, 300))

# create one histogram for each state
library(data.table)
setDT(df1)[, hist(value), by = state]

答案 2 :(得分:0)

你可能想要像

这样的东西

示例数据

df <- data.frame(state = rep(c("AK","AL","AR"),each=100), data=runif(300)*1000)

单个地块上的多个直方图

library(ggplot2)
ggplot(data=df, aes(x=data, fill=state, label=state)) +
  geom_histogram(stat="bin") +
  facet_wrap(~state, nrow=length(unique(df$state)))