我正在分析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家商店,我知道的每个顾客以及他们每次来商店时花了多少钱。商店中顾客群体的密度图将显示有关每个商店有多少人参加的信息。我正在寻找相同的情节,但是每个商店都花了多少钱。 MEH?
答案 0 :(得分: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
生成直方图,但规格为weight
。两者都产生相同的输出: