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
データ フレームの列に割り当てたいと考えています。このように 1 つずつ実行し、後で結果を確認できます。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
、変数ラベルは割り当てません。それを新しいオブジェクトに割り当てようとすると、変数ラベルの値がベクトルとして含まれているだけです。