r - 在 R 中创建交错图表

标签 r

我有一个 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/

相关文章:

r - Pheatmap:annotation_colors[[colnames(annotation)[i]]]中的错误:下标越界

r - 如何创建每行库存的二进制矩阵? (右)

r - prop.table 错误 : x is not an array

r - 忽略 ggplot2 箱线图中的异常值

r - `expss` 和 `data.table` 一起玩得不好

r - 同时为 dplyr 中的分组值导出唯一值和汇总值的有效方法

r 表列出多个具有频率的分类变量

r - 如何在 R 中计算属于同一数据帧中处理组合的列中的记录数(即行、单元格)?

r - "Something is wrong; all the Accuracy metric values are missing:"

正则表达式选择多个组