首页 文章

boxplot单标量变量“by”r数据中的多个真/假变量

提问于
浏览
2

我几个月来一直在徘徊数据 . 对不起,如果这看起来很基本 . 我一直在寻找各种紧密的问题和解决方案,但不知怎的,我似乎无法适应我的情况 . 开始怀疑这是否应该是我应该尝试做的事情,但我想这不会有问题 .

我有一个数据框,有一个标量变量和多个T / F(是/否; 1 / 0,1 / 2)变量 . 像这样:

scal var1 var2 var3
     25   0   1    0
     21   0   1    1
     14   1   1    0
     30   1   0    1

我知道我可以创建一个boxplot,它将标量变量列分成几个类别,使用“by”表示单个变量,如下所示:

boxplot(df$scal~df$var1)

我也知道我可以一次制作多个标量变量的箱形图 . 我想以某种方式将两者结合起来制作一个箱线图,它可以绘制每个“真”子集的因变量和每个变量的“假”子集彼此相邻 . 在我的世界中,一个解决方案应该看起来像“boxplot(df $ scal~df $ var1,df $ scal~df $ var2,df $ scal~df $ var3)”,但r数据与我不一致 . 关于无法强制数据类型的事情 .

我还可以编写一个粗略的循环来遍历每个变量并分别生成所有的图,但我想并排比较它们 .

我还想重新安排数据集,使“true”和“false”集合在不同的列中(使用子集(df $ var1,df $ var1 == 1)等),然后如前所述制作多个箱图 . (虽然这是相当tedius)

var1t var1f var2t var2f var3t var3f
 14    25    25    30    21    25
 30    21    21          30    14
             14                  
boxplot(df2$var1t, df2$var1f, df2$var2t, df2$var2f, df2$var3t, df2$var3f)

但是,在创建新数据集时,列的不同长度(行数)使我适合 . 我知道我可以在另一个程序中创建一个数据集(保存为.csv,.xls等),然后导入它 . 空值将保持不变,但我真的不想手动执行此操作 . 正如人们可能想象的那样,这变得相当繁琐,并且在较大规模上容易出错 .

任何一种方法的帮助都是最受欢迎的 .

2 回答

  • 1

    当你开始学习如何操纵 R 中的数据可能很难 . 我同意@jentjr的观点,即学习 ggplot2 会有所帮助,而Hadley的书除了涵盖 ggplot2 之外,还提供了处理数据的好方法 .

    首先,我建议使用reshape2包来 melt 您的数据:

    (我创建了一个虚拟设置,以便其他人更容易跟随)

    library(reshape2)
    nObs = 10
    df = data.frame(
        scal = rnorm(nObs), 
        var1 = rbinom(nObs, 1, 0.5),
        var2 = rbinom(nObs, 1, 0.5),
        var3 = rbinom(nObs, 1, 0.5))
    

    然后将数据“熔化”成long form from wide form .

    df2 = melt(df, id.vars = c('scal'), 
        variable.name ='myVars', value.name = "zeroOne")
    

    现在,您可以使用 base R 创建所需的 boxplot
    enter image description here

    但是,花时间学习 ggplot2 可以让你创建这样的数字:
    enter image description here

    使用如下代码:

    library(ggplot2)
    ggplot(data = df2, aes(x = zeroOne, y = scal)) + 
        geom_boxplot(aes(fill = myVars))
    

    注意 ggplot2 可以制作比这更漂亮的图(并且比 base R 更容易这样做!)我建议您浏览 ggplot2 webpage以查看更多示例 . 您可能还希望尝试交换 zeroOnemyVars ,因为它会更改绘图分组 .


  • 1

    Plotluck是一个基于ggplot2的库,旨在根据1-3个变量的特征自动选择绘图类型 . 以下是结果图的示例:

    nObs = 100
    df = data.frame(
        scal = rnorm(nObs), 
        var1 = rbinom(nObs, 1, 0.5),
        var2 = rbinom(nObs, 1, 0.5),
        var3 = rbinom(nObs, 1, 0.5))
    plotluck.multi(df, y=scal, opts=plotluck.options(use.geom.violin=F))
    

    此命令意味着:在 df 中绘制列 scal (在y轴上)与另一列相对应(在x轴上;包括其自身,产生密度或直方图) . 我们指定 use.geom.violin=F 来强制执行箱形图,因为默认是小提琴图,它通常可以更好地传达分布的形状 . 如果行数非常低,则将绘制单个点 .

    enter image description here

相关问题