我是R的新手,并且一直试图通过谷歌和论坛找到解决方案。 我的问题:我有一个数据集,我需要根据年龄进行绘图。在40种不同的条件下,有超过1000个变量具有不同的测量值。 看起来像这样:
Age Variables1 Variable2 (....) Variable1000 >
| |
| |
v v
我需要做的是将每个变量列的条件(年龄)绘制成不同的图(所有这些只是散点图)。更重要的是,我希望输出仅限于那些具有正趋势线系数的变量。
所以目前我有这个非常丑陋的代码,基本上是我真正需要的草稿。
plotest <- function(lung){
# need to add the condition of abline function coefficient > 0 before plotting
plot(lung$Age, lung$hsa.let.7a.1, xlab = "Age", ylab = "miRNA")
abline(lm(lung$hsa.let.7a.1 ~ lung$Age), col= "red")
return(plot)
}
par(mfrow=c(2,2))
for (i in lung{plotest(i)})
我知道这大多是错的。很抱歉可怕的一切。
任何人都可以将我引向任何来源,我可能忽略了如何在如此大的数据集中指定范围?和功能语法?我做了一些Python,但发现R在这方面更加混乱...
谢谢大家, 保罗
答案 0 :(得分:0)
这应该与你要求的非常接近,尽管你要用1000个图表做的事情超出了我的范围。
# 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))
# this does the work...
lapply(colnames(df)[-1],function(col){
form <- formula(paste(col,"x",sep="~"))
fit <- lm(form,df)
if (coef(fit)[2] >0) {
plot(form,df)
abline(fit)
}
})
你的代码并不遥远。此示例获取除第一个(colnames(df)[1]
)之外的所有列名称,并将它们一次传递给该函数。该函数使用列名称和第一列的名称创建公式变量,调用lm(...)
,检查x
的系数是否为&gt; 0,如果是,则绘制数据和最佳拟合线。
在formula(...)
,lm(...)
和coef(...)
上查找文档。请注意,此示例有一个变量y3
,其斜率为正,但与0没有显着差异。您应该考虑如何处理这种情况。