在条件语句下将列从一个数据帧传输到另一个数据帧

时间:2014-10-08 15:02:38

标签: r csv

我有这个代码主要是由这里的一个成员编写的,在趋势线系数为正(增加趋势线)的条件下,从我的数据集中导出我需要的所有图形。

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()

这给了我一个pdf文件,我希望稍后使用它来检查数据集中哪些miRNA是必需的,并手动隔离列。然而,我严重低估了符合条件的mirRNA的数量,现在面临一个新的难题,即如何从列中导出数据并将趋势线增加到一个单独的数据框中,我以后将其保存为.csv文件并用于更深入的分析。

请记住,我对R的了解非常有限,尽管我在Rhelp和书籍上度过了几天。我的想法是创建一个单独的数据框(stuff_want),满足条件的列(coef(lm())> 0)将被传输。我最初的想法是使用append()函数并在if条件下写append(stuff_want, mirna, after = length(mirna))后跟write.csv()函数。这个输出只是NA填充的.csv文件。

任何人都能向我解释为什么这不起作用?

一切顺利, Paulius

1 个答案:

答案 0 :(得分: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]

是具有斜率&gt;的变量名称的向量。最后,要提取实际数据,您可以使用:

stuff_want <- stuff[,cols]