R中
问题描述:
创建交错图表我有一个DF,看起来像这样:R中
df <- data.frame(
CM = c("Jan", "Jan", "Jan", "Feb", "Feb", "Mar", "Mar", "Mar", "Apr", "Apr", "Apr"),
PM = c("Jan", "Feb", "Mar", "Feb", "Mar", "Mar", "Apr", "May", "Apr", "May", "Jun"),
Value = c(8, 5, 6, 8, 3, 4, 7, 6, 7, 1, 3))
(其中CM =当月,PM =预测月)我想
df
CM PM Value
Jan Jan 8*
Jan Feb 5
Jan Mar 6
Feb Feb 8*
Feb Mar 3
Mar Mar 4*
Mar Apr 7
Mar May 6
Apr Apr 7*
Apr May 1
Apr Jun 3
将这些整齐的数据转换为交错图表。
Prediction
Jan Feb Mar Apr May Jun ...
M|Jan 8* 5 6
O|Feb 8* 3
N|Mar 4* 7 6
T|Apr 7* 1 3
H|...
* s表示实际值。
答
您可以使用dcast
从reshape2
包:
library(reshape2)
df <- data.frame(
CM = c("Jan", "Jan", "Jan", "Feb", "Feb", "Mar", "Mar", "Mar", "Apr", "Apr", "Apr"),
PM = c("Jan", "Feb", "Mar", "Feb", "Mar", "Mar", "Apr", "May", "Apr", "May", "Jun"),
Value = c(8, 5, 6, 8, 3, 4, 7, 6, 7, 1, 3))
df$CM<-factor(df$CM,levels=month.abb)
df$PM<-factor(df$PM,levels=month.abb)
dcast(df,CM~PM,value.var="Value",fill="")
你的榜样给这个:
CM Jan Feb Mar Apr May Jun
1 Jan 8 5 6
2 Feb 8 3
3 Mar 4 7 6
4 Apr 7 1 3
要添加星星:
res<-dcast(df,CM~PM,value.var="Value",fill="")
row.names(res)<-res[,1]
res<-res[,-1]
for(i in 1:nrow(res)){
res[i,i]<-paste0(res[i,i],"*")
}
res
给出:
答
根据df
你的数值,你可以试试这个:
>df$CM<-factor(df$CM,levels=month.abb)
>df$PM<-factor(df$PM,levels=month.abb)
>xtabs(Value ~ CM + PM, df)
PM
CM Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Jan 8 5 6 0 0 0 0 0 0 0 0 0
Feb 0 8 3 0 0 0 0 0 0 0 0 0
Mar 0 0 4 7 6 0 0 0 0 0 0 0
Apr 0 0 0 7 1 3 0 0 0 0 0 0
May 0 0 0 0 0 0 0 0 0 0 0 0
Jun 0 0 0 0 0 0 0 0 0 0 0 0
Jul 0 0 0 0 0 0 0 0 0 0 0 0
Aug 0 0 0 0 0 0 0 0 0 0 0 0
Sep 0 0 0 0 0 0 0 0 0 0 0 0
Oct 0 0 0 0 0 0 0 0 0 0 0 0
Nov 0 0 0 0 0 0 0 0 0 0 0 0
Dec 0 0 0 0 0 0 0 0 0 0 0 0
+0
理想情况下,我想要输出月份。没有零占位符。 – emehex 2015-02-24 14:50:17
+0
为什么没有零?你有数字值,你只是在这种情况下在字符中破坏它们。此外,如果您需要订购,您可以使用'订单',但我不明白为什么它可能是如此必要。 – 2015-02-24 15:08:01
答
您可以使用下面的太
data<- structure(list(C.M = structure(c(3L, 3L, 3L, 2L, 2L, 4L, 4L,
4L, 1L, 1L, 1L), .Label = c("Apr", "Feb", "Jan", "Mar"), class = "factor"),
P.M = structure(c(3L, 2L, 5L, 2L, 5L, 5L, 1L, 6L, 1L, 6L,
4L), .Label = c("Apr", "Feb", "Jan", "Jun", "Mar", "May"), class = "factor"),
Value = structure(c(8L, 4L, 5L, 8L, 2L, 3L, 6L, 5L, 7L, 1L,
2L), .Label = c("1", "3", "4*", "5", "6", "7", "7*", "8*"
), class = "factor")), .Names = c("C.M", "P.M", "Value"), class = "data.frame", row.names = c(NA,
-11L))
df <- as.data.frame(reshape(data,idvar="C.M",timevar="P.M",direction="wide"))
print (df)
请重复的例子,所以我们不都创建你的数据。 – Spacedman 2015-02-24 14:35:57
“交错图”是指瀑布图(又名阶梯图或楼梯图)? – lawyeR 2015-02-24 14:40:29
@Spacedman固定。 – emehex 2015-02-24 14:43:37