0

我正在分析 R 中的一批数据,我在这些数据上绘制了人口密度。我还想生成一个值密度图。例如:

      dog.breed    weight.lbs
[1]   Labrador     63
[2]   Maltese      6
[3]   Dalmatian    55
[4]   Poodle       51
[5]   Maltese      4
[6]   Dalmatian    48
[7]   Poodle       56

标准密度图将计算每个品种的出现次数,然后输出一条漂亮的曲线,如下所示:

      dog.breed    x
[1]   Labrador     1
[2]   Maltese      2
[3]   Dalmatian    2
[4]   Poodle       2

然而,我试图获得的是一条类似的平滑曲线,用于跟踪每个品种的权重之和,如下所示:

      dog.breed    x
[1]   Labrador     63
[2]   Maltese      10
[3]   Dalmatian    103
[4]   Poodle       107

我可以通过建立一系列点来做到这一点,例如在最后一个示例中,然后拟合曲线。但这很乱。我希望有人知道可以完成繁重工作的干净包装。

谢谢您的帮助。

一些澄清:

另一个例子怎么样。假设我有 50 家商店,对于我认识的每一位顾客,以及他们每次来商店花了多少钱。商店顾客人口的密度图将揭示有关每家商店有多少人光顾的信息。我正在寻找相同的情节,但要寻找所有人在每家商店的消费金额。嗯?

4

1 回答 1

3

如果您使用的是基础 R,则需要查看aggregate

data <- read.table(text="dog.breed    weight.lbs
Labrador     63
Maltese      6
Dalmatian    55
Poodle       51
Maltese      4
Dalmatian    48
Poodle       56", header=TRUE, )

aggregate(. ~ dog.breed, data=data, sum)

#  dog.breed weight.lbs
#1 Dalmatian        103
#2  Labrador         63
#3   Maltese         10
#4    Poodle        107

如果您正在寻找一种无需执行任何操作即可直接从数据中绘图的方法,ggplot 是您的朋友:

require(ggplot2)
ggplot(data, aes(x=dog.breed, y=weight.lbs)) +
  geom_bar(stat="identity")

ggplot(data, aes(x=dog.breed)) +
  geom_bar(aes(weight=weight.lbs))

第一个图为每个 x 绘制多个 y 值,其中geom_bar默认"stack"为 arg 的值position,从而给出 x 的总和。第二个图之所以有效,是因为geom_bar默认情况下会stat_bin生成一个直方图,但使用的是 a 的规范weight。两者都产生等效的输出:

阴谋

于 2012-07-25T22:48:07.367 回答