2013-03-15 69 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