标签与元数据
先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。
char
decode
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 yesnoR 包:base
attr(data$x,'labels')固定流程示例;更改时需同时调整对象名与列名。
附加数值标签字典
Stata
label values x yesnoR 包:haven
data$x <- haven::labelled(data$x,labels=yesno)labelbook
逐列查看数值标签字典
Stata
labelbookR 包: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 xR 包:base
attr(data$x,'notes')读取自定义 R notes 属性;后续操作是否保留取决于变换方式。
numlabel
给每个标签添加数值编码前缀
Stata
numlabel, addR 包:base
labs <- attr(data$x,'labels'); names(labs) <- paste0(unname(labs),'. ',names(labs)); attr(data$x,'labels') <- labs固定流程示例;更改时需同时调整对象名与列名。
删除已知格式的编码标签前缀
Stata
numlabel, removeR 包:base
labs <- attr(data$x,'labels'); names(labs) <- sub('^[0-9]+[.] ','',names(labs)); attr(data$x,'labels') <- labs与 Stata 有差异 仅处理示例中的正整数前缀格式;其他格式需调整匹配模式。