保存变量标签

问题描述 投票:1回答:2

我有一个数据集,包含超过170个变量,看起来像这样:

df <- data.frame(var1 = 1:3, var2 = 2:4, var3 = 2:4, var4 = 2:4, var5 = 2:4)

我已经使用Hmisc手动添加了变量值:

library(Hmisc)
var.labels = c(var1 = "label 1",
               var3 = "label 2",
               var4="label 4" )
label(df) = as.list(var.labels[match(names(df), names(var.labels))])              

请注意,并非所有变量都具有标签,并且对于我来说,通过名称(var*)指定变量标签要容易得多,而不是给定大量列的位置。

问题是,当我使用write.csv(df,"df.csv")write.dta(df,"df.dta")保存数据集时,变量标签会​​丢失。

如何保存已还原标签的数据,然后将其重新导入到R和Stata中?

r label stata data-management
2个回答
0
投票

您可以将数据框的名称设置为可用的那些标签:

colnames(df)[which(!is.na(label(df)))]<-as.character(label(df)[which(!is.na(label(df)))])

0
投票

考虑以下Stata玩具数据集:

clear

set obs 5
set seed 12345

forvalues i = 1 / 5 {
    generate var`i' = runiformint(1, 10)
    label variable var`i' "`= runiformint(34256, 116778)'"
}

label variable var3 ""

一种简单的方法是将变量名/标签保存在分离变量中并导出这些变量:

generate names = ""
generate labels = ""
local i 0

foreach v of varlist var* {
    local ++i
    replace names = "`v'" in `i'
    replace labels = "`: variable label `v''" in `i'
}

export delimited toydata.csv, replace

一旦再次加载数据,您可以按如下所示还原标签:

clear
import delimited toydata.csv, stringcols(7) 

local i 0
foreach v of varlist var* {
    local ++i
    if "`v'" == name[`i'] label variable `v' "`=labels[`i']'"
}

注意,数据集中变量的顺序在这里很重要,但最后一个循环检查变量名称是否与名称/标签对匹配。

您可以通过编写一个小程序来进一步开发和推广此方法。

© www.soinside.com 2019 - 2024. All rights reserved.