如果缺少列名,使用 R 中以前的列名?

If column name is missing, use previous column name in R?

如果缺少列名,是否可以将其名称替换为之前的非 NA 列名(从左到右)?当然,新名称可以不同,因此使用以前的非 NA 列名称和简单数字来区分两者的解决方案将是完美的。如果一个非 NA 列名后跟两个 NA 列名,我希望两者都被替换。

我有一个缺少列名的大数据框。请参阅下面的 reprex。

# Dataframe with missing column names
tibble("con" = c(3, 3), "...2" = c(3, 2), "...3" = c(1, 0.9), "lab" = c(0.3, 0.01), "...5" = c(1, 9))

# Ideal result
tibble("con" = c(3, 3), "con_2" = c(3, 2), "con_3" = c(1, 0.9), "lab" = c(0.3, 0.01), "lab_2" = c(1, 9))

我们可以将以 ... 开头的列转换为 NA 并使用 na.locf0 将其更改为以前的非 NA 元素并使用 make.unique 创建唯一列通过附加后缀数字来命名。

library(dplyr)
library(zoo)
tbl1 %>%
   set_names(make.unique(na.locf0(replace(names(.), 
             startsWith(names(.), "..."), NA))))

或者在base R中用greplcumsum创建一个分组索引,用avepaste来改变

names(tbl1) <- ave(names(tbl1), cumsum(!grepl("...", names(tbl1), 
   fixed = TRUE)), FUN = function(x) paste0(x[1], "_", c("", seq_along(x)[-1])))