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