[英]rename the multiple columns in R
我有1000個文件,列名列相似。例如:
DF1
DATE PRICE CLOSE
DF2
DATE PRICE CLOSE
等等...
如果我嘗試根據日期合並它們,它們會合並,但列保留了它們的舊名稱,我想在循環中重命名它們
所以合並數據集看起來像這樣
Date Price Close PRICE CLOSE
我想要類似的東西
DATE PRICE1 CLOSE1 PRICE2 CLOSE2.
有沒有簡單的方法呢? 我嘗試了幾件沒有給我正確輸出的東西
這是使用plyr包:
mod_join = function(mypath){
filenames=list.files(path=mypath, full.names=TRUE)
datalist = lapply(filenames, function(x){read.csv(file=x,header=T)[,c('Date','High','Low')]})
join_all(datalist,by = "Date")
}
這是在所有數據框上使用merge命令:
merge2 = function(mypath){
filenames=list.files(path=mypath, full.names=TRUE)
datalist = lapply(filenames, function(x){read.csv(file=x,header=T)[,c('Date','High','Low')]})
Reduce(function(x,y) {merge(x,y,by.x= "Date",by.y = "Date",all=T)}, datalist)}
}
我嘗試使用for循環,使數據幀處於領先地位,然后使用每個數據幀進行子集化和隨后合並,但不知何故,它不對數據幀進行子集化:
for (i in 1:1000){
data_subset <- sprintf('data_%d',i)
mydata_subset <- data.frame(,data_subset["Date"],data_subset["High"],data_subset["DayLow"])
obj_name <- paste('subset_Pricedata',i,sep ="_")
assign(obj_name,value = mydata_subset)
}
任何幫助都會很棒。 謝謝
希望這能完成你的工作:
library(plyr)
df1 = rename(df1,c("PRICE"="PRICE1","CLOSE"="CLOSE1"))
df2 = rename(df2,c("PRICE"="PRICE2","CLOSE"="CLOSE2"))
new = merge(df1,df2,all=TRUE)
如果您遇到任何困難,請評論。
這種方法怎么樣? 它應該很快,因為它使用data.table及其fread-function
library(data.table)
merge2 <- function(mypath){
filenames <- list.files(path=mypath, full.names=TRUE)
fileslist <- lapply(filenames, function(nam){
# reads the file
file <- fread(nam)
setnames(file, 2, "price") # renames the second col to "price"
setnames(file, 3, "close") # third to "close"
return(file)
})
dat <- rbindlist(fileslist)
return(dat)
}
編輯
我剛剛意識到你要合並你的數據而不是長格式。 你可以做的只是在返回文件之前添加一個帶有名稱的變量給data.table“file”:
file[, varnam := nam]
然后使用reshape2庫及其dcast函數在返回之前轉換最終的data.table“dat”。
我遇到了類似的問題。 這是我最終使用的內容,盡管可能有更簡潔的方法。
函數suffix_col_names將為列的子集添加后綴。 我使用這個是因為我最終在第1-10列合並了第1周和第2周的數據。
#function called suffix_col_names
suffix_col_names<-function(your_df, start_col, end_col, your_str, your_sep){
for (i in start_col:end_col){
colnames(your_df)[i]<-paste(colnames(your_df)[i], sep=your_sep,your_str)
}
return(your_df)
}
#call function to rename columns in week1 and week2
week_1_data<-suffix_col_names(week1,11,24,"1",".")
week_2_data<-suffix_col_names(week2,11,24,"2",".")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.