在Stata中,我可以使用codebookout
命令创建一个Excel工作簿,该工作簿将现有数据集中所有变量的名称,标签和存储类型与相应的值和值标签一起保存。R:是否有与Stata的codebookout命令相同的内容?
我想在R中找到等效函数。到目前为止,我遇到了memisc
函数库,它有一个名为codebook
的函数,但它与Stata中的函数不同。
例如,在Stata,码本的输出应该是这样的......(见下文 - 这就是我想要的)
Variable Name Variable Label Answer Label Answer Code Variable Type
hhid hhid Open ended String
inter_month inter_month Open ended long
year year Open ended long
org_unit org_unit long
Balaka 1
Blantyre 2
Chikwawa 3
Chiradzulu 4
即在数据帧中的每一列进行评估,以产生5个不同列的值:
- 变量名这是该列的名称
- 变量标签是 列的名称
- 答案标签,它是 列中的唯一值。如果没有唯一值,则认为是开放式结果
- 答案代码,它是对答案标签中每个类别的数字分配。如果答案标签不是分类,则为空。
- 变量类型:int,STR,长(日期)...
这里是我的尝试:
CreateCodebook <- function(dF){
numbercols <- length(colnames(dF))
table <- data.frame()
for (i in 1:length(colnames(dF))){
AnswerCode <- if (sapply(dF, is.factor)[i]) 1:nrow(unique(dF[i])) else ""
AnswerLabel <- if (sapply(dF, is.factor)[i]) unique(dF[order(dF[i]),][i]) else "Open ended"
VariableName <- if (length(AnswerCode) - 1 > 1) c(colnames(dF)[i],
rep("",length(AnswerCode) - 1)) else colnames(dF)[i]
VariableLabel <- if (length(AnswerCode) - 1 > 1) c(colnames(dF)[i],
rep("",length(AnswerCode) - 1)) else colnames(dF)[i]
VariableType <- if (length(AnswerCode) - 1 > 1) c(sapply(dF, class)[i],
rep("",length(AnswerCode) - 1)) else sapply(dF, class)[i]
df = data.frame(VariableName, VariableLabel, AnswerLabel, AnswerCode, VariableType)
names(df) <- c("Variable Name", "Variable Label", "Variable Type", "Answer Code", "Answer Label")
table <- rbind(table, df)
}
return(table)
}
不幸的是,我得到以下警告消息:
Warning messages:
1: In `[<-.factor`(`*tmp*`, ri, value = 1:3) :
invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, ri, value = 1:2) :
invalid factor level, NA generated
我产生的输出结果导致答案代码标签混乱:
Variable Name Variable Label Variable Type Answer Code Answer Label
hhid hhid hhid Open ended character
month month month Open ended integer
year year year Open ended integer
org_unit org_unit org_unit Open ended character
v000 v000 v000 Open ended character
v001 v001 v001 Open ended integer
v002 v002 v002 Open ended integer
v003 v003 v003 Open ended integer
v005 v005 v005 Open ended integer
v006 v006 v006 Open ended integer
v007 v007 v007 Open ended integer
v021 v021 v021 Open ended numeric
2285 v024 v024 central <NA> factor
1 north <NA>
7119 south <NA>
11 v025 v025 rural <NA> factor
1048 v025 v025 urban <NA> factor
district_name district_name district_name Open ended character
coords_x1 coords_x1 coords_x1 Open ended numeric
coords_x2 coords_x2 coords_x2 Open ended numeric
itn_color itn_color itn_color Open ended numeric
piped piped piped Open ended numeric
sanit sanit sanit Open ended numeric
sanit_cd sanit_cd sanit_cd Open ended numeric
water water water Open ended numeric
你能证明你是如何试图到目前为止回答这个问题?你可以开始写一些代码......(否则,这是“找到一个非现场资源”(脱离主题)或“为我写代码”(脱离主题)......) –
我基本上有一个DataFrame (它可以是任何数据帧,无关紧要),我将代码簿应用于该df。但输出不是我想要的。 –
对不起,我读得太快了,没有看到你在问题的原始版本中提到过'memisc :: codebook'。尽管如此,恐怕(如果你自己不能取得更大的进展)这个问题可能不适合SO,因为你基本上需要一个定制/非常具体的输出。 –