Я работаю с набором таблиц Excel, имена столбцов которых являются датами.
После считывания данных с readxl::read_xlsx()
эти имена столбцов становятся датами индекса Excel (то есть целым числом, представляющим дни, прошедшие с 1899-12-30
)
Возможно ли использовать dplyr::rename_if()
или подобное для переименования всех имен столбцов, которые в настоящее время являются целыми числами? Я написал функцию rename_func
, которую я хотел бы применить ко всем таким столбцам.
df %>% rename_if(is.numeric, rename_func)
не подходит, так как is.numeric
применяется к данным в столбце, а не к самому имени столбца. Я также попробовал:
is.name.numeric <- function(x) is.numeric(names(x))
df %>% rename_if(is.name.numeric, rename_func)
, который не работает и не меняет никакие имена (т.е. is.name.numeric
возвращает FALSE
для всех столбцов)
edit: вот фиктивная версия моих данных
df_badnames <- structure(list(Level = c(1, 2, 3, 3, 3), Title = c("AUSTRALIAN TOTAL",
"MANAGERS", "Chief Executives, Managing Directors & Legislators",
"Farmers and Farm Managers", "Hospitality, Retail and Service Managers"
), `38718` = c(213777.89, 20997.52, 501.81, 121.26, 4402.7),
`38749` = c(216274.12, 21316.05, 498.1, 119.3, 4468.67),
`38777` = c(218563.95, 21671.84, 494.08, 118.03, 4541.02),
`38808` = c(220065.05, 22011.76, 488.56, 116.24, 4609.28)), row.names = c(NA,
-5L), class = c("tbl_df", "tbl", "data.frame"))
и мне хотелось бы:
df_goodnames <- structure(list(Level = c(1, 2, 3, 3, 3), Title = c("AUSTRALIAN TOTAL",
"MANAGERS", "Chief Executives, Managing Directors & Legislators",
"Farmers and Farm Managers", "Hospitality, Retail and Service Managers"
), Jan2006 = c(213777.89, 20997.52, 501.81, 121.26, 4402.7),
Feb2006 = c(216274.12, 21316.05, 498.1, 119.3, 4468.67),
Mar2006 = c(218563.95, 21671.84, 494.08, 118.03, 4541.02),
Apr2006 = c(220065.05, 22011.76, 488.56, 116.24, 4609.28)), row.names = c(NA,
-5L), class = c("tbl_df", "tbl", "data.frame"))
Я понимаю, что лучше всего создать столбец date
и изменить форму этого df, но мне нужно сначала объединить несколько электронных таблиц, и наличие целочисленных имен столбцов вызывает много проблем. В настоящее время у меня есть обходной путь, но суть моего вопроса (применить предикат rename_if к имени, а не к столбцу) по-прежнему интересна.