我開始使用更大的數據集,我需要一種方法來自動化我已經使用的函數。我希望實現的框架將在dplyr select()中應用一個循環來識別控制組和相應的大型數據框中的實驗組,然後執行函數,保存輸出,最後重複循環數據集中的所有樣本。在dplyr中編寫一個循環select()
數據很複雜,因爲我經常處理包含3000多個樣本的數據集,因此寫出列標題中的每個樣本都會影響使用計算機程序的效率。
數據的佈局非常簡單。每個對照組標記爲「對照」,每個實驗組標記爲「exper」。爲了將每個控件與它的實驗組配對,我添加了一個數字組件,這樣control1將對應於exper1,control2到exper2等。最後,許多實驗組對應於相同的控件,因此我添加了一個按字母順序的組件:exper1a和exper1b都對應於control1。
這裏是一個表頭的一個示例:
可變CONTROL1 CONTROL1 exper1a exper1a exper1b exper1b
EDIT ###請參閱由Pierre在所檢查的答案提供的可再生的數據###對不起,不提供我自己的數據。
我想要代碼查找「控制」的第一個整數,然後找到相同的整數具有相同的exper。在對應於control1的eprimental組中,我想確定第一個alapbetic組,並保存結果表。例如:
可變控制1控制1 exper1a exper1a
接下來,我想代碼重複此功能適用於所有其他對EXPER goups與控制1(即exper1b),一旦所有EXPER組已用盡對於control1,移動到control2 ..,並重復此操作,直到不再有控制組保留。
基本上我只想要一堆由一張大桌子製成的小桌子。
這裏是我到目前爲止的作品拼湊起來:
library(readr)
library(dplyr)
df<-read.csv("big_table.csv")
我知道這是可悲的,但它比上市100+失敗的嘗試我試過好。這裏是我想象的工作理論框架:
# define i as a list of integers without a limit
# define n as a list alpahbetical characters, start at a, stop at z
for(i in 1:ncol(x)) {
select(df, variable, contains(i))
for(n in a:ncol(x)){
selcect(df, variable, contains(n))
write.csv("controli_experin.csv")
# where i in controli is the variable "i", and "in" represents the variables "i" and "n" in experin.
}}
希望這可以給大家一個我想要做的事情的想法。理想情況下,只要列命名遵循相同的模式,我就可以將此代碼應用於大型和小型數據集。
非常感謝您的幫助。
這是不好的做法,同樣名稱的兩個列,例如'variable control1 control1 exper1 exper1'。如果你調用'df [,「control1」]',你(或cpu)怎麼知道列的期望? –
有幾點意見:(1)因爲我們沒有你的CSV,所以向我們顯示你用來閱讀它的代碼是毫無意義的(特別是因爲你的問題與閱讀數據無關,而應該嘗試讓你的問題[可重現](http://stackoverflow.com/q/5963269/903061),在這種情況下,最簡單的方法可能是提供用於模擬數據的代碼。(2)你可能想閱讀[tidy data ](http://vita.had.co.nz/papers/tidy-data.pdf),你似乎有一組「列」,這些列可能會比現有的廣泛形式做得更好。 – Gregor
And( 3)如果你堅持使用可變列而不是轉換爲長格式並僅使用'group_by',那麼[在dplyr中對標準和非標準評估有非常好的傾斜](https://cran.r-project.org /web/packages/dplyr/vignettes/nse.html)這應該是你的出發點。 – Gregor