有人在公衆號的後臺留言問到
他的數據如下,
第一列是自變量,後面每一列是因變量,先算每一列和第一列的迴歸係數,有很多個這樣的文件,如果用R語言批量來做怎們實現
想了一下,應該還挺有用的,我寫了一個循環函數
batch_lm<-function(df,var,axis){
x <- c()
y <- c()
z <- c()
var1 <- df %>% pull(var)
new.df <- df %>% select(-var)
for (var2 in colnames(new.df)){
if(axis==1){
df.lm<-lm(new.df %>% pull(var2) ~ var1)
x<-append(x,var)
y<-append(y,var2)
z<-append(z,df.lm$coefficients[2] %>% as.vector())
}
else{
df.lm<-lm(var1 ~ new.df %>% pull(var2))
x<-append(x,var)
y<-append(y,var2)
z<-append(z,df.lm$coefficients[2] %>% as.vector())
}
}
return(data.frame(var1=x,var2=y,coef_value=z))
}
總共有三個參數,
- 第一個df是讀取進來的數據集
- 第二個var是想要固定的列的名字
- 第三個參數axis取值是1和2,1代表固定的列是自變量,2代表固定的列是因變量
最後返回一個數據框
使用這個函數之前要加載tidyverse
這個R包
比如讀取開頭的示例數據計算迴歸係數
library(tidyverse)
df<-read.csv("lm_example.csv")
batch_lm(df,"hours",axis=1)
我這個數據是隨便夠早的,所以係數都一樣
那假如有好多個文件的話,首先把所有數據文件裏的固定的那一列的列名都改成一樣的,比如我的數據裏就全是hours,然後把所有數據集都放到同一個文件夾下,比如我放到文件夾lmExamples下,我這邊是csv文件
代碼
csvfiles<-list.files("lmExamples/",
pattern = "*.csv",
full.names = TRUE)
final_results<-list()
for(csvfile in csvfiles){
df<-read.csv(csvfile)
final_df<-batch_lm(df,'hours',axis = 1)%>% mutate(new_col=csvfile)
final_results[[csvfile]]<-final_df
}
final_results %>% bind_rows()
最終輸出結果
這裏我用的數據都一樣,所以結果係數都是一樣的,換成你自己的數據應該不是這樣的
完整代碼
library(tidyverse)
batch_lm<-function(df,var,axis){
x <- c()
y <- c()
z <- c()
var1 <- df %>% pull(var)
new.df <- df %>% select(-var)
for (var2 in colnames(new.df)){
if(axis==1){
df.lm<-lm(new.df %>% pull(var2) ~ var1)
x<-append(x,var)
y<-append(y,var2)
z<-append(z,df.lm$coefficients[2] %>% as.vector())
}
else{
df.lm<-lm(var1 ~ new.df %>% pull(var2))
x<-append(x,var)
y<-append(y,var2)
z<-append(z,df.lm$coefficients[2] %>% as.vector())
}
}
return(data.frame(var1=x,var2=y,coef_value=z))
}
df<-read("lmExamples/lm_example.csv")
batch_lm(df,'hours',axis = 1)
batch_lm(df,'hours',axis = 2)
csvfiles<-list.files("lmExamples/",
pattern = "*.csv",
full.names = TRUE)
final_results<-list()
for(csvfile in csvfiles){
df<-read.csv(csvfile)
final_df<-batch_lm(df,'hours',axis = 1)%>% mutate(new_col=csvfile)
final_results[[csvfile]]<-final_df
}
final_results %>% bind_rows()
final_results %>% bind_rows() %>% write_csv(file="output.csv")
可能會遇到這個信息,可以忽略
示例數據和代碼可以給推文點贊,然後點擊在看,最後留言獲取
歡迎大家關注我的公衆號
小明的數據分析筆記本
小明的數據分析筆記本 公衆號 主要分享:1、R語言和python做數據分析和數據可視化的簡單小例子;2、園藝植物相關轉錄組學、基因組學、羣體遺傳學文獻閱讀筆記;3、生物信息學入門學習資料及自己的學習筆記!
微信公衆號好像又有改動,如果沒有將這個公衆號設爲星標的話,會經常錯過公衆號的推文,個人建議將 小明的數據分析筆記本 公衆號添加星標,添加方法是