如何汇总和绘制数据框的数据

时间:2019-09-13 16:44:06

标签: r dataframe plot bar-chart

我的原始数据

head(predictionDB)
  Helpful X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22
1       1  1  1  1  0  1  1  0  0  0   0   1   1   0   0   0   1   1   0   0   1   0   0
2       0  1  0  0  0  0  1  0  0  0   1   0   1   1   0   0   0   0   0   1   0   1   0

我使用以下代码对其进行了汇总:

plotDB <- aggregate(predictionDB, 
                    list(predictionDB$Helpful), 
                    mean)

这是输出数据

> plotDB
  Group.1 Helpful        X1        X2        X3        X4        X5        X6        X7        X8        X9       X10       X11      X12       X13       X14       X15       X16       X17       X18       X19       X20       X21       X22
1       0       0 0.1666192 0.1857021 0.2418114 0.2258616 0.1774423 0.1874110 0.2603247 0.1777271 0.1407007 0.1540872 0.1794361 0.174879 0.1859869 0.3691256 0.2574765 0.1569353 0.2455141 0.1726004 0.1572202 0.2016520 0.2267160 0.1911136
2       1       1 0.2896282 0.3180039 0.2896282 0.3072407 0.2666341 0.3228963 0.2793542 0.2818004 0.2504892 0.2607632 0.2588063 0.316047 0.3317025 0.2896282 0.3003914 0.2656556 0.3047945 0.2999022 0.3126223 0.3131115 0.2813112 0.3131115

现在,我想创建一个在x轴上包含变量的图,以便比较所有变量X的均值(对于有用= 0和有用= 1)。

使用以下代码为我提供了每个变量都需要两个有用类的图,但x轴上根本没有标签。

问题:

  • 在某些情况下,y轴刚好达到0.30
  • 条形图下没有有用的课程(1,0)的标签
barplot(t(as.matrix(plotDB[,3:nTopicsLDA])), 
        beside=TRUE)

其中nTopicsLDA是数字变量,在这种情况下为22。

enter image description here

非常感谢您!

1 个答案:

答案 0 :(得分:1)

由于barplot使用基础矩阵的列​​标题作为x轴标签,因此由于t(as.matrix(...))返回空的colnames,因此您的绘图不会呈现x轴标签:

colnames(t(as.matrix(plotDB[,3:nTopicsLDA])))
# NULL

考虑将宽数据框架重塑为长格式(通常是大多数数据分析操作(包括绘图)的首选结构),并使用tapply构建绘图矩阵:

# RESHAPE WIDE TO LONG
predictionDB_long <- reshape(predictionDB, idvar = "Helpful",
                             varying=names(predictionDB)[-1], v.names="Value",
                             times = names(predictionDB)[-1], timevar = "X",
                             new.row.names = 1:1E5, direction="long")

# TAPPLY MEAN CALL ON TWO GROUPINGS FOR 2-D MATRIX
plot_mat <- with(predictionDB_long, tapply(Value, list(X, Helpful), mean))

# RE-ORDER COLUMNS
plot_mat <- plot_mat[paste0("X", 1:nTopicsLDA),]

这样做, plot_mat colnames成为x轴标签。但是,默认情况下仅渲染一个x轴标签:

# BAR PLOT WITH ONE AXIS
barplot(plot_mat, ylim=c(0, 0.6), beside=TRUE, cex.names=0.75,
        main = "Mean Helpful Bar Plot")

Bar Plot with One Axis

对于两个轴,您需要定制的解决方案,例如调用axis(),以根据字体大小相应地调整水平和填充参数。了解如何集成row.names。请注意 Helpful 条的二进制集之间的中间空间的容纳情况:

# BAR PLOT WITH TWO AXES
barplot(plot_mat, ylim=c(0, 0.6), beside=TRUE, cex.names=0.75,
        main = "Mean Helpful Bar Plot")

axis(1, at=1:(nTopicsLDA*2 + 2), hadj=-0.5, padj=-2,
     labels=c(row.names(plot_mat), "", row.names(plot_mat), ""), cex.axis=0.5)

Bar Plot with Two Axes


数据

set.seed(9132019)
predictionDB <- data.frame(Helpful = sample(c(0, 1), 500, replace=TRUE),
                           replicate(22, sample(c(0, 1), 500, replace=TRUE))
)
nTopicsLDA <- ncol(predictionDB) - 1