Как пометить имена столбцов фрейма данных непосредственно вектором

#r #dataframe #vector #label

#r #фрейм данных #вектор #метка

Вопрос:

У меня есть фрейм данных с 300 столбцами. Я хотел бы пометить столбцы вектором (состоящим из 300 записей). Я пытаюсь использовать помеченный пакет. Но я не хочу присваивать каждой переменной метку одну за другой -> id= "Identity" , age = "Age" …. и т.д. Я хотел бы присвоить имена меток из вектора непосредственно столбцам -> c("Identity", "Age", ...

Пример:

 library(tidyverse)
library(labelled)

#dataframe
df <- data.frame(matrix(0, ncol = 300, nrow = 2))
#vector of labels for columns
label_colname <- sprintf("label_colname[%d]",seq(1:300))

df %>% set_variable_labels(label = label_colname)
 

error in set_variable_labels(., label = label_colname) : some variables not found in .data

Комментарии:

1. вы пробовали colnames(df)<-label_colname

2. names(df) <- c('vector', 'of', 'new', 'names') ?

3. Спасибо. Оба решения меняют имена переменных. Я намереваюсь пометить короткие имена переменных, такие как «dos», «Датой операции», чтобы получить значимые имена для таблиц. Имя переменной короткое, без дополнительных символов. Метки более сложны с помощью скобок, дополнительного пробела и т. Д. Имена меток не подходят для имен переменных.

4. Ах, afaik, нет хорошо поддерживаемого способа сделать это. Вы могли бы добавить его в качестве атрибутов, но атрибуты очень легко удаляются без предупреждения, и вам придется вытаскивать ярлык обратно, когда вы этого захотите. vctrs позволяет делать некоторые подобные вещи, но вам придется создавать их самостоятельно, и это излишне. Обычный рабочий процесс заключается в том, чтобы либо изменить имена на читаемые в последнюю минуту, либо изменить их непосредственно в таблице / графике / что угодно. Удобно хранить их в таблице поиска.

Ответ №1:

Теперь я нашел решение с помощью пакета с меткой sjlabelled:

 library(sjlabelled)

df <- data.frame(matrix(0, ncol = 30, nrow = 2))
label_colname <- sprintf("label_colname[%d]",seq(1:30))

df <- set_label(df, label = label_colname) # set_label from sjlabelled package
 

введите описание изображения здесь

Ответ №2:

Поскольку label хранится просто как атрибут, вы также можете сделать это непосредственно в base R:

 for (i in seq_along(df)) {
  attr(df[[i]], "label") <- label_colname[i]
}
 

введите описание изображения здесь

Данные (извлечены из TarJae)

 df <- data.frame(matrix(0, ncol = 30, nrow = 2))
label_colname <- sprintf("label_colname[%d]",seq(1:30))