如果缺少列名,使用 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
中用grepl
和cumsum
创建一个分组索引,用ave
和paste
来改变
names(tbl1) <- ave(names(tbl1), cumsum(!grepl("...", names(tbl1),
fixed = TRUE)), FUN = function(x) paste0(x[1], "_", c("", seq_along(x)[-1])))
如果缺少列名,是否可以将其名称替换为之前的非 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
中用grepl
和cumsum
创建一个分组索引,用ave
和paste
来改变
names(tbl1) <- ave(names(tbl1), cumsum(!grepl("...", names(tbl1),
fixed = TRUE)), FUN = function(x) paste0(x[1], "_", c("", seq_along(x)[-1])))