2013-03-15 47 views
2

让我先说这个问题,说我对R知道的很少。我使用read.table(“file.txt”,T)将一个文本文件导入到R中。该文本文件为在一般格式为:R:data.frame to vector

header1 header2 
a   1 
a   4 
b   3 
b   2 

每一个是从样品的观察同样地,每个b是从不同的样品的观察。我想用tapply(header2,header1,mean)来计算我正在做的a和b集合的各种统计。这工作正常。

现在我需要做一些a和b的qqnorm图并用qqline绘制。我可以使用tapply(header2,header1,qqnorm)来使用tapply(header2,header1,qqline)绘制每个BUT的分位数图,并在最后的分位图上绘制最合适的线。编程方式有道理,但它不能帮助我。

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

谢谢!

+3

这是非常基本的R问题。也许你可以阅读关于R的一些教程,因为这将是最有帮助的。 – 2013-03-15 05:13:07

+1

如果能够自己找到答案,我不会问这个问题... – canadianer 2013-03-15 05:30:30

+1

我认为geektrader指的是:http://cran.r-project.org/manuals.html – 2013-03-15 05:31:25

回答

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] 

你不是真的想污染你的全球环境中有很多的对象(这将是低效的)。

+0

非常感谢。我认为会有一种简单的方法来创建两个向量,但使用函数对我来说没问题。 – canadianer 2013-03-15 05:36:04

+0

有,使用拆分lapply和list2env,或重塑和list2env,但上面的方式是更习惯于R. – mnel 2013-03-15 05:49:45

+0

这实际上似乎工作:a = subset(dd,header1 ==“a”),但有很高的概率我错过了一些重要的事情。 – canadianer 2013-03-15 05:51:46