首页 > 解决方案 > 将列值前缀添加到列表中多个数据框中的选定列名

问题描述

我有 149 个数据框的列表;我想将每个数据框中的选定列名称更改为以 SiteLoc 列中的值作为前缀。列表的缩写版本如下:

SL1_68 <- tibble(SiteLoc=rep("SL1_68",5),
                 Cov1=c(10,50,0,75,10),
                  Cov2=c(50,20,15,50,75),
                   Cov3=c(25,5,0,0,75))

SL2_70 <- tibble(SiteLoc=rep("SL2_70",5),
                 Cov1=c(10,50,0,75,10),
                  Cov2=c(50,20,15,50,75),
                   Cov3=c(25,5,0,0,75))

Site_list <- list(SL1_68,SL2_70)

我找到了以下代码,它允许我更改给定数据框中选定的列名:

Site_list$SL1_68 <- Site_list$SL1_68 %>% 
  rename_at(2:4, ~ paste("SL1_68", ., sep = "_"))

但是,我不想遍历每个单独的数据框,而是想为整个列表编写一个循环或函数,该列表将在列名前面加上“SiteLoc”中的值(这对于每个数据框都是唯一的)。

我找到了以下问题/答案,这似乎对我有所帮助,但我不确定如何将函数和下面的答案应用于我自己的代码以仅将其应用于第 2-4 列:

R将数据框名称附加到数据框列表中的每个列

任何帮助将不胜感激。

标签: rlist

解决方案


您可以在 for 循环中执行此操作。

for(i in 1:length(Site_list)) {
  prefix <- unique(Site_list[[i]]$SiteLoc)

  Site_list[[i]] <- Site_list[[i]] %>% 
    rename_at(2:4, ~ paste(prefix, ., sep = "_"))
} 

可能有一种更优雅的方式,但这似乎有效。


推荐阅读