我仍然是R中的新手。我有24个csv文件。我想将它们(不必一次一个地调用)作为具有较短数据框名称的数据框导入,并针对每个数据框根据数据框的名称(或.csv文件名)替换一些列名。下面是一个具有3个数据帧的示例。
myverylongtitle_df_ABX.csv
在前面的示例中,我希望将名为myverylongtitle_df_ABX.csv
,myverylongtitle_df_ABX.csv
和df_ABX
的csv文件作为具有以下名称的数据帧导入:df_ABX
,{{1 }},df_ABX
。然后,我想根据这些字母在这些字母中的位置,将col1
,col2
,col3
重命名为A
,B
或X
数据框名称。例如:col2
应该重命名数据框名称中位置2的字母,即:B
如果数据框为df_ABX
,则A
如果数据框为{{1} },如果数据帧为df_BAX
,则返回Z
。 df_XAB
(位置1)和col1
(位置3)应同样适用。
答案 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)
})