首页 > 解决方案 > 如何在列表中的每个数据帧中的不同位置重命名 NA-Column

问题描述

我有一个包含很多数据框的列表。

列名称如下所示:

[1] "TIMESTAMP"    "CLOSE"       
[3] "HIGH"         "LOW"         
[5] "OPEN"         NA            
[7] "daily_return"

一栏,根本没有名字。并且列的顺序在每个元素中都不同。这意味着“NA”列有时在开头,有时在结尾,有时在中间。

我的目标是给它一个名字,然后对它们重新排序,以便列表的每个元素以相同的顺序具有相同的列名。

到目前为止我尝试过的(仅使 NA 列消失):

lapply(price_list_clean, FUN = function(X){X[c("TIMESTAMP",
                                                                     "OPEN",
                                                                     "HIGH",
                                                                     "LOW",
                                                                     "CLOSE",
                                                                     "daily_return",
                                                                     NA)]})

编辑

我最后一次识别 NA 列并为其命名:

for( i in 1:length(price_list_clean)){

  for(f in 1:ncol(price_list_clean[[i]])){

    if(is.na(colnames(price_list_clean[[i]])[f])){

      names(price_list_clean[[i]])[f] <- "RIC_Updated"

    }



  }

print(i)
}

也许有人有一个更优雅的想法?

有什么建议么?

亲切的问候

标签: rlistdataframedplyr

解决方案


我们创建了一个自定义列名顺序的向量,用 循环遍历listdata.frames map,用于rename_with更改“NA”的列名(假设每个 data.frame 只有一个),并且select列的顺序为名称的自定义顺序向量

library(purrr)
library(dplyr)
correct_order <- c("TIMESTAMP","OPEN","HIGH","LOW","CLOSE",
             "daily_return","new_name")
price_list_clean <- map(price_list_clean, ~ 
                     .x %>%
                       rename_with(~ 'new_name', matches("^NA$")) %>%
                       select(all_of(correct_order)))

推荐阅读