簡體   English   中英

重命名R中的多個列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM