我有一个有很多数据帧的列表。
列名看起来像这样:
[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)))