如何从R中得到平均值的曲线图
我有不同的宿舍如何从R中得到平均值的曲线图,r,plot,R,Plot,我有不同的宿舍 Quarter GrossMargin 2009 Q1 17.60% 2009 Q1 17.80% 2010 Q2 18.50% 2011 Q1 21.60% 像这样看,我有大数据集。我想在R中绘制它。我使用了qplot(df$Quarter,df$GrossMargin,binwidth=.5) 每次事件的数据点上都有点。与x轴2009年第一季度一样,Y轴上有两
Quarter GrossMargin
2009 Q1 17.60%
2009 Q1 17.80%
2010 Q2 18.50%
2011 Q1 21.60%
像这样看,我有大数据集。我想在R中绘制它。我使用了qplot(df$Quarter,df$GrossMargin,binwidth=.5)
每次事件的数据点上都有点。与x轴2009年第一季度一样,Y轴上有两个相应的数据点,一个位于17.6,另一个位于17.8。但我想要每个季度的平均值,就像在x轴2009中一样,Q1应该对应于Y轴的单个值(即17.6和17.8的平均值)。若我试着做平均值(格罗斯马金),它给出了整列的平均值,这是并没有用的。我所有的季度(2009年第一季度、第二季度、第三季度、2010年第一季度、第二季度、第三季度)都在一列中,格罗斯马金的相应值在另一列中。如何在R中执行此操作
Order.Id ProductID UnitPrice UnitCost Quantity Order.Date TotalUnitPrice Quarter GrossMargin Customer.Id TotalUnitCost
1 24849 BDM10023 28.87 23.8 1 01-01-2009 28.87 2009 Q1 17.60% 10025 23.8
2 24849 1283484PMR29 77.84 64 2 01-01-2009 155.68 2009 Q1 17.80% 10025 128
3 24850 1283484SST30 25.78 20 4 01-02-2009 103.12 2009 Q1 22.40% 10096 80
4 24852 GFO20015 8.2 6.75 1 01-02-2009 8.2 2009 Q1 17.70% 10062 6.75
5 24852 OCM10018 8.24 6.8 2 01-02-2009 16.48 2009 Q1 17.50% 10062 13.6
6 24852 BDM10021 8.24 6.8 4 01-02-2009 32.96 2009 Q1 17.50% 10062 27.2
7 24852 POW20011 11.33 9.25 4 01-02-2009 45.32 2009 Q1 18.40% 10062 37
8 24852 AP6011 9.22 7.5 2 01-02-2009 18.44 2009 Q1 18.70% 10062 15
9 24852 POW30012 8.24 6.5 2 01-02-2009 16.48 2009 Q1 21.10% 10062 13
10 24852 PPF20017 11.86 10.25 1 01-02-2009 11.86 2009 Q1 13.60% 10062 10.25
11 24853 AP3008 8.2 6.75 1 01-02-2009 8.2 2009 Q1 17.70% 10030 6.75
12 24855 VEV10023 8.2 6.75 1 01-03-2009 8.2 2009 Q1 17.70% 10037 6.75
13 24855 AP6006 7.73 6.3 2 01-03-2009 15.46 2009 Q1 18.50% 10037 12.6
14 24855 AP5010 8.2 6.75 2 01-03-2009 16.4 2009 Q1 17.70% 10037 13.5
15 24856 1283484PMS30 7.21 5.9 2 01-03-2009 14.42 2009 Q1 18.20% 10078 11.8
16 24857 AP4009 7.16 5 2 01-03-2009 14.32 2009 Q1 30.20% 10032 10
17 24857 GFO10014 7.16 5.9 2 01-03-2009 14.32 2009 Q1 17.60% 10032 11.8
18 24858 AP3003 6.17 5 1 01-04-2009 6.17 2009 Q1 19.00% 10243 5
19 24858 OWW3009 10.25 8.75 1 01-04-2009 10.25 2009 Q1 14.60% 10243 8.75
20 24858 BDM10022 6.18 5.1 1 01-04-2009 6.18 2009 Q1 17.50% 10243 5.1
21 24858 AP2008 6.13 5 1 01-04-2009 6.13 2009 Q1 18.40% 10243 5
22 24858 AP5005 6.7 5.25 1 01-04-2009 6.7 2009 Q1 21.60% 10243 5.25
23 24859 POW30012 8.24 6.5 2 01-04-2009 16.48 2009 Q1 21.10% 10052 13
24 24860 POW20011 11.33 9.25 4 01-04-2009 45.32 2009 Q1 18.40% 10019 37
25 24861 POW10010 18.14 15 2 01-04-2009 36.28 2009 Q1 17.30% 13710 30
26 24861 OWW3009 10.25 8.75 1 01-04-2009 10.25 2009 Q1 14.60% 13710 8.75
27 24862 1283484CPN28 13.35 11 4 01-04-2009 53.4 2009 Q1 17.60% 15310 44
将此粘贴到excel中。我使用R中的write命令创建了这个excel文件。原始文件中大约有10000多条记录
> str(df)
'data.frame': 29487 obs. of 11 variables:
$ Order.Id : num 24849 24849 24850 24852 24852 ...
$ ProductID : Factor w/ 42 levels "1202020SFB25",..: 24 4 7 29 31 22 36 19 37 39 ...
$ UnitPrice : num 28.87 77.84 25.78 8.2 8.24 ...
$ UnitCost : num 23.8 64 20 6.75 6.8 ...
$ Quantity : num 1 2 4 1 2 4 4 2 2 1 ...
$ Order.Date : Factor w/ 1261 levels "1/1/2009","1/1/2010",..: 1 1 45 45 45 45 45 45 45 45 ...
$ TotalUnitPrice: num 28.9 155.7 103.1 8.2 16.5 ...
$ Quarter : chr "2009 Q1" "2009 Q1" "2009 Q1" "2009 Q1" ...
$ TotalUnitCost : num 23.8 128 80 6.75 13.6 ...
$ GrossMargin : chr "17.6%" "17.8%" "22.4%" "17.7%" ...
$ Customer.Id : num 10025 10025 10096 10062 10062 ...
> dput(df)
15097, 15097, 12466, 12466, 15104, 15104, 15104, 15104, 15104,
15104, 15104, 15104, 15104, 15104, 15104, 15104, 15000, 15099,
15099, 15099, 15099, 15099, 15099, 15099, 15099, 15099, 15099,
15099, 15099, 15099, 15099, 15099, 15099, 15099, 15099, 15099,
15099, 15099, 15099, 14546, 14546, 14546, 14546, 14546, 15349,
15349, 15349, 14729, 14729, 14729, 15101, 15101, 15101, 15101,
15101, 15101, 15101, 15101, 15101, 15101, 15185, 15185, 15185,
15185, 15185, 15185, 15185, 15185, 10435, 10435, 10435, 10435,
10435, 10435, 10435, 15319, 15319, 15319, 15319, 15319, 15319,
15319, 15319, 15319, 15319, 15319, 15319, 15319, 15319, 15319,
15319, 15319, 15319, 15319, 15842, 15842, 15842, 15352, 15352,
15352, 15352, 15352, 15352, 15352, 15352, 12173, 10576, 10426,
11971, 15276, 15083, 15209, 15181, 15176, 15204, 15239, 15597,
15184, 15149, 15093, 15162, 10916, 15175, 13380, 15246, 15206,
14859, 12304, 12074, 15174, 13467, 12633, 13307, 10414, 10456,
15170, 15173, 15172, 15187, 15201, 16160, 15171, 11640, 12814,
16013, 10552, 15255, 14834, 14525, 15285, 15286, 15163, 15169,
15268, 15202, 14999, 15264, 15166, 15377, 15211, 14167, 15203,
15210, 12153, 15299, 15299, 15299, 15299, 15299, 15299, 15299,
15299, 15299, 15299, 15299, 15299, 15299, 15299, 15299, 15299,
15299, 15299, 15299, 15299, NA, NA)), .Names = c("Order.Id",
"ProductID", "UnitPrice", "UnitCost", "Quantity", "Order.Date",
"TotalUnitPrice", "Quarter", "TotalUnitCost", "GrossMargin",
"Customer.Id"), row.names = c(NA, 29487L), class = "data.frame")
是一个窗口控制台的输出在这里,您可以使用
数据。表
包中的求平均值。
未经测试,因为您未提供可复制的数据
library(data.table)
dt = as.data.table(df)
plotData = dt[,list(MarginAvg=mean(GrossMargin)),by=Quarter]
qplot(plotData$Quarter, plotData$MarginAvg)
例如:
dt = data.table(Quarter=c(1,1,2,3),GrossMargin=c(.176,.178,.185,.216))
plotData = dt[,list(MarginAvg=mean(GrossMargin)),by=Quarter]
plotData
Quarter MarginAvg
1: 1 0.177
2: 2 0.185
3: 3 0.216
plot(plotData$Quarter, plotData$MarginAvg) #just a plot
首先,将
%
字符串转换为数值:
df[2] <- as.numeric(gsub("%", "", as.character(df[ , 2])))
绘图:
这个答案首先是在回答问题时发布的。我安装了data.table包并尝试了>library(data.table)>dt=as.data.table(df)>plotData=dt[,list(MarginAvg=mean(GrossMargin)),by=quarty]as.environment中有15个警告(使用warnings()查看它们)>qplot(dt$quarty,dt$MarginAvg)错误(何处):“where”缺失我没有得到任何我错了的图表,请在我说>plotData季度边际时提问1:2009 Q1 NA 2:2009 Q2 NA 3:2011 Q1 NA 4:2010 Q2 NA 5:2010 Q4 NA 6:2012 Q1 NA 7:2009 Q3 NA 8:2010 Q1 NA 9:2011 Q3 Nare在这篇文章之后写下你的问题,你需要显示你的真实数据,就像你在例子中给出的那样,我不能写Quarter=c(1,1,2,3……),GrossMargin=c(.176,.178,…),因为有超过10000条记录说我名声不好10):要上传图像df[2]@bas,请发布
str(df)的输出
进入您的问题。这允许复制您的数据集。我已在中输入str(df)的输出question@bas你能用dput(df)的输出替换你的数据吗?@Sven Hohenstein我已经输入了dput(df)的输出
dat <- aggregate(GrossMargin ~ Quarter, df, mean)
plot(as.factor(dat$Quarter), dat$GrossMargin)