我几个月来一直在徘徊数据 . 对不起,如果这看起来很基本 . 我一直在寻找各种紧密的问题和解决方案,但不知怎的,我似乎无法适应我的情况 . 开始怀疑这是否应该是我应该尝试做的事情,但我想这不会有问题 .
我有一个数据框,有一个标量变量和多个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 回答
当你开始学习如何操纵
R
中的数据可能很难 . 我同意@jentjr的观点,即学习ggplot2
会有所帮助,而Hadley的书除了涵盖ggplot2
之外,还提供了处理数据的好方法 .首先,我建议使用reshape2包来
melt
您的数据:(我创建了一个虚拟设置,以便其他人更容易跟随)
然后将数据“熔化”成long form from wide form .
现在,您可以使用
base
R
创建所需的boxplot
:但是,花时间学习
ggplot2
可以让你创建这样的数字:使用如下代码:
注意
ggplot2
可以制作比这更漂亮的图(并且比base
R
更容易这样做!)我建议您浏览ggplot2
webpage以查看更多示例 . 您可能还希望尝试交换zeroOne
和myVars
,因为它会更改绘图分组 .Plotluck是一个基于ggplot2的库,旨在根据1-3个变量的特征自动选择绘图类型 . 以下是结果图的示例:
此命令意味着:在
df
中绘制列scal
(在y轴上)与另一列相对应(在x轴上;包括其自身,产生密度或直方图) . 我们指定use.geom.violin=F
来强制执行箱形图,因为默认是小提琴图,它通常可以更好地传达分布的形状 . 如果行数非常低,则将绘制单个点 .