应用标签是使调查数据在报告时易于理解的重要部分
所以我能找到的最好的例子使用 expss::apply_labels() 例如著名的 mtcars 例子https://cran.r-project.org/web/packages/expss/vignettes/tables-with-labels.html
作为输入,这需要一个 data.table 和一个逗号分隔的赋值对列表,例如
apply_labels(dt, col1 = "label1", col2 = "label2", col3 = "label3")
如果您有一个数据文件和几列,这很好,并且每次都输入它们可能会很麻烦,但如果您有很多数据文件,它就不是很有帮助。那么如何加载格式的 csv 元数据文件:
Col1 Col2 Col3
标签1 标签2 标签3
其中 Col 名称与数据表中的相同名称匹配
这意味着有效地翻译元数据 csv 文件,以便生成
col n = "标签n "
对于每一列。
到目前为止,我发现最大的问题是应用标签列名是对象而不是字符串,并且很难将字符串转换为正确范围内的对象。
这是我必须去的地方
library(expss)
library(data.table)
library(glue)
readcsvdata <- function(dfile)
{
rdata <- fread(file = dfile, sep = "," , quote = "\"" , header = TRUE,
stringsAsFactors = FALSE, na.strings = getOption("datatable.na.strings","NA"))
return(rdata)
}
rawdatafilename <- "testdata.csv"
rawmetadata <- "metadata.csv"
mdt <- readcsvdata(rawmetadata)
rdt <-readcsvdata(rawdatafilename)
commonnames <- intersect(names(mdt),names(rdt)) # find common
qlabels <- as.character(mdt[1, commonnames, with = FALSE])
comslist <- list()
for (i in 1:length(commonnames)) # loop through commonnames and qlabels
{
if (i == length(commonnames))
{x <- glue('{commonnames[i]} = "{qlabels[i]}"')} # no comma for final item
else
{x <- glue('{commonnames[i]} = "{qlabels[i]}",')} # comma for next item
comslist[[i]] <- x
}
comstring <- paste(unlist(comslist), collapse = '')
tdt = apply_labels(tdt, eval(parse(text = comstring)))
产生
解析错误(文本 = comstring)::1:24:意外','1:varone =“Label1”,^
哦, print(comstring) 产生:
[1] "varone = \"问题一\",vartwo = \"问题二\",varthree = \"问题三\",varfour = \"问题四\",varfive = \"问题五\",varsix = \"问题六\",varseven = \"问题七\",vareight = \"问题八\",varnine = \"问题九\",varten = \"问题十\""