r语言 - 如何重命名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)
}

也许有人有更优雅的方法?

有什么建议吗?

亲切的问候

你可以试试-

correct_order <- c("TIMESTAMP","OPEN","HIGH","LOW","CLOSE","daily_return","new_name")
price_list_clean  <- lapply(price_list_clean, function(x) {
names(x)[match(TRUE, is.na(names(x)))] <- 'new_name'
x[correct_order]
})

我们创建一个自定义列名顺序的向量,用map循环data.frames的list,使用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)))

相关内容

最新更新