таблицами - пользовательские функции в r




R: Назначение переменных меток столбцов фрейма данных (2)

Вы можете назначить метки, используя lapply :

var.labels = c(age="Age in Years", sex="Sex of the participant")

label(data) = lapply(names(var.labels), 
                     function(x) label(data[,x]) = var.labels[x])

label(data)
                     age                      sex 
          "Age in Years" "Sex of the participant" 

lapply применяет функцию к каждому элементу списка или вектора. В этом случае функция применяется к каждому значению names(var.labels) . Чтение нескольких учебных пособий - хороший способ получить общую идею, но вы действительно получите ее, если начнете использовать lapply в разных ситуациях и посмотреть, как они себя ведут.

Я борюсь с переменными метками столбцов data.frame. Скажем, у меня есть кадр данных (это часть гораздо большего кадра данных):

data <- data.frame(age = c(21, 30, 25, 41, 29, 33), sex = factor(c(1, 2, 1, 2, 1, 2), labels = c("Female", "Male")))

У меня также есть именованный вектор с метками переменных для этих данных:

var.labels <- c(age = "Age in Years", sex = "Sex of the participant")

Я хочу, чтобы назначить метки переменных в var.labels столбцам данных data с помощью label функций из пакета Hmisc . Я могу сделать их один за другим, как это, и затем проверить результат:

> label(data[["age"]]) <- "Age in years"
> label(data[["sex"]]) <- "Sex of the participant"
> label(data)
                 age                      sex
      "Age in years" "Sex of the participant"

Ярлыки переменных назначаются как атрибуты столбцов:

> attr(data[["age"]], "label")
[1] "Age in years"
> attr(data[["sex"]], "label")
[1] "Sex of the participant"

Замечательно. Однако с более крупным фреймом данных, скажем, 100 или более столбцов, это будет не очень удобно или эффективно. Другая вещь, которую я мог бы легко сделать, - это назначить их как атрибуты напрямую:

> attr(data, "variable.labels") <- var.labels

Не помогает. Ярлыки переменных не назначаются столбцам:

> label(data)
age sex
 ""  ""

Вместо этого они назначаются как атрибут самого кадра данных (см. Последний компонент списка):

> attributes(data)
$names
[1] "age" "sex"

$row.names
[1] 1 2 3 4 5 6

$class
[1] "data.frame"

$variable.labels
                 age                      sex
      "Age in Years" "Sex of the participant"

И это не то, что я хочу. Мне нужны метки переменных как атрибуты столбцов. Я попытался написать следующую функцию (и многие другие):

set.var.labels <- function(dataframe, label.vector){
  column.names <- names(dataframe)
  dataframe <- mapply(label, column.names, label.vector)
  return(dataframe)
}

И чем выполнить его:

> set.var.labels(data, var.labels)

Не помогло. Он возвращает значения векторных var.labels , но не присваивает метки переменных. Если я попытаюсь назначить его новому объекту, он просто будет содержать значения меток переменных в качестве вектора.


Если ваш вектор меток совпадает с порядком ваших столбцов data.frame, но не является именованным вектором (поэтому его нельзя использовать для подмножества столбцов data.frame по имени, например, подход lapply в другом ответе), вы можете использовать for-loop:

for(i in seq_along(data)){
  Hmisc::label(data[, i]) <- var.labels[i]
}

label(data)
#>                      age                      sex 
#>           "Age in Years" "Sex of the participant"




hmisc