答案 0 :(得分:1)
修改强>
我总是忘记by
,但它在这里要好得多,没有额外的库,更短,没有解决方法,你也得到了输出:
by(df1$data,df1$state,hist)
旧答案
您不需要创建单独的data.frames,您可以使用dplyr
和group_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)))