2013-02-21 45 views
0

多個列我有這樣密度爲在一個時間中的R

V1 V2 V3 V4.............V60 
11 22 33 44.............89 
21 98 22 33.............09 
33 44 55 78.............20 

上述文件的輸入文件具有超過3000行,每行中的60列。

當我試圖在我的[R提示符下使用density(data, kernel="gaussian", bw=15),它產生一個錯誤說

Error in density.default(data) : argument 'x' must be numeric 

但是,當我嘗試density(data$V1, kernel="gaussian", bw=15),它工作正常。

我想知道是否有一個命令來計算整個文件的密度,而不是爲每一個列執行60次。

+1

你想要60個密度或1個單一密度組合嗎? – csgillespie 2013-02-21 17:14:12

+0

您好@csgillespie,我確實需要所有60個密度的3000個記錄。是否有辦法爲每個值生成密度?我的意思是可以生成另一個輸出文件,其中包含類似於我的輸入文件的密度?對於非常基本的問題抱歉,因爲我來自生物學背景。 – 2013-02-21 17:18:17

回答

1

您可能正在尋找sapplyapply
可以使用

apply(myDataName, 2, density, kernel="gaussian", bw=15) 

如果你的列factor s,而不是numeric,你需要將這些先轉換。

+0

謝謝@Ricardo。但是,價值2是否意味着什麼?您的代碼正在生成60個密度。有用。但是,我也想知道輸入文件中的每個值,有沒有辦法獲得密度? – 2013-02-21 17:20:46

+0

是的,'2'指的是列或更具體的第二維(相當於從dim(x)'中返回的信息的順序)。關於apply的更多信息請查看'?apply',你也可以在這裏搜索,因爲這裏有很多關於'* apply'函數 – 2013-02-21 18:01:05

+0

@jsmith的問題,關於你的問題的第二部分:你是如何特別定義「每個值」? – 2013-02-21 18:01:39

0

很有可能您的data對象是數據框(當使用read.tableread.csv等工具讀取數據時,這是默認設置)。

如果要處理每列(爲每列創建一個單獨的密度圖),則可以使用lapply函數。

如果你想要基於所有數據的單一密度(列不代表任何內容),那麼你可以使用unlist函數將它全部轉換爲一個大向量。更好的做法可能是使用scan函數代替read.table將數據加載到一個向量中,然後一起跳過數據幀。

+0

謝謝@Greg。但是裏卡多的上述應用指令給出了60個密度。我想知道在每個值下計算密度的可能性。所以,我的密度文件將攜帶與我的輸入文件相同的數據格式。 – 2013-02-21 17:26:15

+0

@jsmith,你想要每行的密度?在這種情況下,你可以像上面那樣使用'apply',只需要使用1而不是2。 – 2013-02-22 04:27:54