#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))