【问题标题】:Histogram of sum instead of frequency - R总和而不是频率的直方图 - R
【发布时间】:2015-07-16 22:34:31
【问题描述】:

我想绘制一个直方图,其中 y 轴代表一列的总和。 我为分类数据找到了这个示例: R histogram that sums rather than frequency。 但是,这不是我想要的,因为它不适用于连续数据,我必须在其中定义 bin。

假设我有 x 和 y:

set.seed(1)
mydata <- data.frame(y = runif (100, min= 0, max = 1),
                 x = rpois(100, 15) * 10)

传统的直方图如下:

hist (mydata$x)

现在如何获得 y 轴上 y 的累积和?

【问题讨论】:

  • 使用cumsum() 创建一个具有累积和的变量并使用它来绘制直方图?如cumsum(mydata$x)
  • 直方图是单变量的。您需要更清楚地描述您要查找的内容。
  • 所以,您想使用来自hist 的自动分箱来自动分箱x 值,根据ys 将ys 分组在一起,并将每个组中的y 相加,并绘制 y 与 x 分组的累积总和?
  • with(mydata, aggregate(y, by=list(bin=cut(x, nclass.Sturges(x))), FUN=sum))。这就是@Gregor 所说的。
  • 为了在下面反映您想要的最终答案,您可能会更改您的原始问题以删除累积金额的提及,因为这不是这里计算的内容。

标签: r histogram


【解决方案1】:

这是解决这个问题的一种方法,它利用 hist() 函数完成大部分繁重的工作,并且具有 y 的累积和的条形图与 x 的直方图的 bin 和维度相匹配的优点:

set.seed(1)
mydata <- data.frame(y = runif (100, min= 0, max = 1), x = rpois(100, 15) * 10)
mx <- mydata$x
my <- mydata$y

h <- hist(mydata$x)

breaks <- data.frame(
    "beg"=h$breaks[-length(h$breaks)], 
    "end"=h$breaks[-1]
)

sums <- apply(breaks, MARGIN=1, FUN=function(x) { sum(my[ mx >= x[1] & mx < x[2] ]) })

h$counts <- sums
plot(h, ylab="Sum", main="Sum of y Within x Bins")

【讨论】:

  • 对不起@ForrestR.Stevens,你为什么在y轴上得到这么高的值? Y 从 0 到 1 变化,考虑到我们有 100 次 y 重复,它的总和应该始终低于 100。正确的?我猜你根本没有使用 y 的信息,是吗?
  • 如果我理解您的原始问题,您想要原始频率区间中包含的所有值的总和,对吗? y 轴上的值表示该总和,超过 2000 的总和对于超过 150 的 15 个值是正常的?如果您想要这些 bin 中 y 的总和,那么您可以将 sum() 调用中的 d 替换为 mydata$y。我可以更改答案以反映这是您想要的吗?
  • 啊,我从你的回答中看出我对你原来的问题感到困惑。我很抱歉。我已经更新了我的答案,因此您可以随意接受自己的答案,具体取决于哪个更符合要求。
  • 很抱歉给您带来了困惑!我也刚刚编辑了我的答案!我实际上想要 bin 内的总和而不是累积总和!谢谢!
  • 嘿,好的。好吧,我很高兴看到我们都感到困惑。我已经编辑了我的答案,not 然后使用累积和。
【解决方案2】:

总结所有cmets,这就是我想要的。谢谢@Alex A。

set.seed(1)

mydata <- data.frame(y = runif (100, min= 0, max = 1), x = rpois(100, 15) * 10)

a <- aggregate(mydata$y, by=list(bin=cut(mydata$x, nclass.Sturges(mydata$x))), FUN=sum)
a$bin<- gsub (']','',as.character (a$bin))
a$bin<- gsub (',',' ',as.character (a$bin))

ab2=sapply(strsplit(as.character(a$bin), " "), "[", 2)
barplot(a$x, names.arg=ab2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2017-01-11
    • 2020-01-27
    • 2020-08-08
    相关资源
    最近更新 更多