在数据框名称后重命名列

时间:2019-03-28 12:12:36

标签: r dataframe rename

我仍然是R中的新手。我有24个csv文件。我想将它们(不必一次一个地调用)作为具有较短数据框名称的数据框导入,并针对每个数据框根据数据框的名称(或.csv文件名)替换一些列名。下面是一个具有3个数据帧的示例。

myverylongtitle_df_ABX.csv

在前面的示例中,我希望将名为myverylongtitle_df_ABX.csvmyverylongtitle_df_ABX.csvdf_ABX的csv文件作为具有以下名称的数据帧导入:df_ABX,{{1 }},df_ABX。然后,我想根据这些字母在这些字母中的位置,将col1col2col3重命名为ABX数据框名称。例如:col2应该重命名数据框名称中位置2的字母,即:B如果数据框为df_ABX,则A如果数据框为{{1} },如果数据帧为df_BAX,则返回Zdf_XAB(位置1)和col1(位置3)应同样适用。

2 个答案:

答案 0 :(得分:2)

rename_at放在list中后,我们就可以使用

library(tidyverse)
lst(df_ABX, df_BAX, df_XAB) %>% 
      imap(~  {
      nm1 <- str_remove(.y, 'df_') %>%
               strsplit("") %>% 
               unlist
   .x %>%
         rename_at(2:4, ~ nm1)})
#$df_ABX
#    Name  A  B  X col4
#1  name1 10 20 30   40
#2  name2  5 10 15   20
#3 name13 17 16 15   14

#$df_BAX
#    Name  B  A  X col4
#1  name1 11 21 31   41
#2  name2  4  9  8   19
#3 name13 10 10 15   15

#$df_XAB
#    Name  X  A  B col4
#1  name1  9 19 29   28
#2  name2 15 15 55   25
#3 name13 18 10 11   12

答案 1 :(得分:1)

如果您满意列表,可以使用以下方法:

files <- c("myverylongtitle_df_ABX.csv","myverylongtitle_df_BAX.csv","myverylongtitle_df_BXA.csv")

lapply(files,function(file)
  {
  df <- read.table(file)
  spl <- strsplit(file,"_")[[1]]
  name <- sub("\\.csv","",spl[length(spl)])
  names(df)[2:4] <- strsplit(name,"")[[1]])
  return(paste0("df_",name)=df)
})