2014-10-08 52 views
0

我有這樣的代碼,主要是由這裏的一個成員編寫的,這些代碼在趨勢線係數爲正數的情況下導出我需要從數據集中獲取的所有圖形增加趨勢線)。在條件語句下將列從一個數據框轉移到另一個

lung <- read.csv("LAC.csv") 
attach(lung)  #data 
age <- lung$Age 
mirna <- data.frame(lung) 
stuff <- data.frame(matrix(ncol = 500, nrow = 40)) 

pdf("test.pdf") # exports to pdf all the graphs 

lapply(colnames(mirna)[-1],function(col){ #function for plotting 
    form <- formula(paste(col, "age", sep = "~")) 
    fit <- lm(form, mirna) 
    stuff_want <- stuff 
    if (coef(fit)[2] >0) { #plotting with condition 
    plot(form, df, xlab = "Age", main= "miRNA expression with increasing age") 
    abline(fit, col = 4) 
    } 
}) 

dev.off() 

這給了我,我希望在以後使用,以檢查其中的miRNA在數據集中的要求和手動隔離柱的PDF文件。但是,我嚴重低估了符合條件的mirRNA的數量,現在又面臨着一個新的難題,那就是如何將數據從列中導出並將趨勢線增加到單獨的數據框中,我將稍後保存爲.csv文件並用於更深入的分析。

請記住我對R的知識非常有限,儘管我在Rhelp和書籍中花費了幾天時間。我的想法是創建一個單獨的數據框(stuff_want),滿足條件(coef(lm())> 0)的列將被轉移到該框中。我最初的想法是使用append()函數並在if條件下編寫append(stuff_want, mirna, after = length(mirna))後跟write.csv()函數。這個輸出只是NA填充的.csv文件。

任何人都可以向我解釋爲什麼這不起作用?

一切順利, Paulius

+0

後'如果(COEF(適合更換代碼) 2]> 0)'by'if(coef(fit)[2]> 0)col'應該解決問題。 – agstudy 2014-10-08 15:10:10

回答

0

因此,這裏是一個辦法(類似@ agstudy的評論),使用相同的由數據作爲我previous answer

# make up some data 
x <- seq(1,10,len=100) 
set.seed(1) # for reproducible example 
df <- data.frame(x,y1=1+2*x+rnorm(100), 
        y2=3-4*x+rnorm(100), 
        y3=2+0.001*x+rnorm(100)) 

# you start here... 
result <- sapply(colnames(df)[-1],function(col){ 
    form <- formula(paste(col,"x",sep="~")) 
    fit <- lm(form,df) 
    if(coef(fit)[2] > 0) TRUE else FALSE 
}) 
cols <- names(result)[result] 
cols 
# [1] "y1" "y3" 

這將創建一個名爲向量, result哪些元素與您的響應變量名稱相同,如果該變量具有正斜率,則值= TRUE,否則爲FALSE。然後

cols <- names(result)[result] 

是與斜率的變量名的矢量> 0。最後,以提取實際的數據,可以使用:

stuff_want <- stuff[,cols] 
相關問題