我有一个 df 看起来像这样:
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
给出:
Jan Feb Mar Apr May Jun
Jan 8* 5 6
Feb 8* 3
Mar 4* 7 6
Apr 7* 1 3
关于r - 在 R 中创建交错图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28698374/