标签与元数据

先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。

char

查看自定义列特征

Stata

char list x[]

R 包:base

attributes(data$x)

返回全部 R 属性,包括自定义元数据。

保存自定义列特征

Stata

char x[source] "questionnaire"

R 包:base

attr(data$x,'source') <- 'questionnaire'

R 属性可用作本地元数据;许多变换不保留任意属性。

decode

将数值标签解码为文本

Stata

decode x, generate(text)

R 包:haven

data$text <- as.character(haven::as_factor(data$x))

encode

按排序顺序编码非空类别

Stata

encode s, generate(code)

R 包:base

data$code <- as.integer(factor(data$s,levels=sort(unique(data$s[!is.na(data$s)&data$s!='']))))

与 Stata 有差异 只生成整数编码。要保留类别标签请使用带标签向量或保留因子;排序依赖区域设置。

label

添加数据集标签

Stata

label data "Research sample"

R 包:base

attr(data,'label') <- 'Research sample'

固定流程示例;更改时需同时调整对象名与列名。

另有 6 个示例及替代实现

定义可复用的数值标签映射

Stata

label define yesno 1 "No" 2 "Yes"

R 包:base

yesno <- c(No=1,Yes=2)

R 将映射存为命名向量;需分别附加到各标签列。

读取列的数值标签映射

Stata

label list yesno

R 包:base

attr(data$x,'labels')

固定流程示例;更改时需同时调整对象名与列名。

删除数值标签并保留数值

Stata

label values x

R 包:haven

data$x <- haven::zap_labels(data$x)

附加数值标签字典

Stata

label values x yesno

R 包:haven

data$x <- haven::labelled(data$x,labels=yesno)

删除变量标签

Stata

label variable x ""

R 包:base

attr(data$x,'label') <- NULL

添加描述性变量标签

Stata

label variable x "Response"

R 包:base

attr(data$x,'label') <- 'Response'

labelbook

逐列查看数值标签字典

Stata

labelbook

R 包:base

lapply(data,function(z) attr(z,'labels'))

与 Stata 有差异 列出已附加字典;不复制 Stata 完整的多语言标签检查。

labmask

将已有文本值设为数值标签

Stata

labmask code, values(text)

R 包:haven

dictionary <- unique(data[c('code','text')]); stopifnot(!anyDuplicated(dictionary$code)); data$code <- haven::labelled(data$code,stats::setNames(dictionary$code,dictionary$text))

与 Stata 有差异 要求每个数值编码唯一对应一个文本标签;保留所给数值编码,不按文本字母顺序重新编码。

notes

读取一列的注释

Stata

notes list x

R 包:base

attr(data$x,'notes')

读取自定义 R notes 属性;后续操作是否保留取决于变换方式。

另有 1 个示例及替代实现

为一列附加文本注释

Stata

notes x: Measured at baseline

R 包:base

attr(data$x,'notes') <- 'Measured at baseline'

使用 R 属性保存;不复刻 Stata 编号注释管理。

numlabel

给每个标签添加数值编码前缀

Stata

numlabel, add

R 包:base

labs <- attr(data$x,'labels'); names(labs) <- paste0(unname(labs),'. ',names(labs)); attr(data$x,'labels') <- labs

固定流程示例;更改时需同时调整对象名与列名。

删除已知格式的编码标签前缀

Stata

numlabel, remove

R 包:base

labs <- attr(data$x,'labels'); names(labs) <- sub('^[0-9]+[.] ','',names(labs)); attr(data$x,'labels') <- labs

与 Stata 有差异 仅处理示例中的正整数前缀格式;其他格式需调整匹配模式。

uselabel

生成数值标签字典表

Stata

uselabel using sample.dta, clear

R 包:base

labs <- attr(data$x,'labels'); dictionary <- data.frame(lname='x',value=unname(labs),label=names(labs),trunc=0L)

使用已导入的标签列。R 无独立 Stata 标签定义名;lname 使用列名。