2

让我先说我对 R 知之甚少。我正在使用 read.table("file.txt", T) 将文本文件导入 R 中。文本文件采用一般格式:

header1    header2
a          1
a          4
b          3
b          2

每个 a 都是来自样本的观察结果,同样每个 b 都是来自不同样本的观察结果。我想计算我正在用tapply(header2,header1,mean)做的a和b集合的各种统计数据。这很好用。

现在我需要做一些a和b的qqnorm图并用qqline绘制。我可以使用 tapply(header2, header1, qqnorm) 制作每个分位数图,但使用 tapply(header2, header1, qqline) 在最后一个分位数图上绘制两条最佳拟合线。从编程上讲,这是有道理的,但对我没有帮助。

所以我的问题是,如何将数据帧转换为两个向量(一个用于所有 a,一个用于所有 b)?那有意义吗?基本上,在上面的示例中,我希望得到两个向量:a=(1,4) 和 b=(3,2)。

谢谢!

4

1 回答 1

4

创建一个两者兼而有之的函数。您将无法(至少很容易)恢复到旧的图形设备。

例如

with(dd, tapply(header2,header1,  function(x) {qqnorm(x); qqline(x)}))

您可以data.table在这里使用编码优雅(和速度)

您可以传递body在 data.table 范围内评估的函数的等效项,例如

library(data.table)
DT <- data.table(dd)
DT[, {qqnorm(x)
      qqline(x)}, by=header1]

您真的不想用大量对象污染您的全局环境(这将是低效的)。

于 2013-03-15T05:15:27.880 回答