【问题标题】:Histogram R - Show data as a percentage [closed]直方图 R - 以百分比形式显示数据 [关闭]
【发布时间】:2017-05-29 19:49:23
【问题描述】:

我有关于在火车事故中丧生的人及其年龄的数据。

例如:

file <- data.frame(
        Survived = sample(0:1, 100, replace=TRUE),
        Age = sample(0:100, 100, replace=TRUE))

我想在 R 中创建一个直方图,其中每个 bin 衡量死亡人数占 bin 范围内包含的数据集中总人数的百分比。

这是我目前所拥有的:

hist(file[which(file$Survived==1),]$Age, freq=FALSE)

但这只会返回一个直方图,其值占整个数据集的百分比。像这样:Histogram of Sample Data

我需要特定年龄组的百分比,这样如果所有 0-10 岁的人都死了,那么该年龄组的直方图条将是 100%。

【问题讨论】:

  • 查看hist()函数设置freq参数FALSEhist(yourvariable,freq=F)
  • 我知道如何获取整个数据集的百分比。我正在寻找 bin 中包含的数据百分比。
  • 例如 20-40 岁的死亡人数除以数据集中 20-40 岁的人数
  • 请在您的帖子中包含一个可重现的示例:stackoverflow.com/help/mcve
  • 如果您使用包,您会发现这更容易。具体来说,dplyrggplot2。例如,请参阅这个非常相似的问题:stackoverflow.com/questions/41030350/…

标签: r histogram


【解决方案1】:

我不确定我是否很好地理解了您的数据,但这里有可能使用barplot 函数:

#example data    
AGE<-c(rep("<20",6),rep("20-40",6),rep("40-60",9))
set.seed(123)
SURVIVED<-sample(c(0,1), replace=TRUE, size=21)
df<-data.frame(AGE,SURVIVED)

#output of the data
df
     AGE SURVIVED
1    <20        0
2    <20        1
3    <20        0
4    <20        1
5    <20        1
6    <20        0
7  20-40        1
8  20-40        1
9  20-40        1
10 20-40        0
11 20-40        1
12 20-40        0
13 40-60        1
14 40-60        1
15 40-60        0
16 40-60        1
17 40-60        0
18 40-60        0
19 40-60        0
20 40-60        1
21 40-60        1

#the actual code
barplot(prop.table(table(df$SURVIVED,df$AGE), margin =2)[2,])

#and the proportions per group
> prop.table(table(df$SURVIVED,df$AGE), margin =2)

          <20     20-40     40-60
  0 0.5000000 0.3333333 0.4444444
  1 0.5000000 0.6666667 0.5555556

table 将为您提供每个年龄段的SURVIVED==1 的频率,prop.table 将为您提供百分比。

这和你要找的很接近吗?

【讨论】:

  • 您需要将数据分组
  • 没有更干净的方法吗?
  • 等一下,对不起,我只是计算了您提供的数据,这根本不是我需要的。这些是整个数据集的百分比,而不是特定年龄范围。
  • 确实,时间不早了。我已经更新了答案。你现在拥有的就是组内的比例。
  • 我很确定你必须以某种方式将你的数据分组到 GyB 提到的 bin 中。如果您只关心修改数据,那应该很容易。如果您的列是“年龄”和“幸存者”,请将它们分成类似splitlist&lt;-split(df, cut(df$ages, seq(0,max(df$ages), by = 20))) 的组,然后按照@GyB 的建议进行条形图barplot(rbind(lapply(splitlist, function(x) 100*sum(x[,"survived"])/nrow(x))))
猜你喜欢
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 2021-09-17
  • 2023-04-02
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多