- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Stata 中,我可以使用 codebookout
命令创建一个 Excel 工作簿,保存现有数据集中所有变量的名称、标签和存储类型及其相应的值和值标签。
我想在 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 个不同列的值:
这是我的尝试:
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
我生成的输出导致 Answer Code 标签变得困惑:
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
最佳答案
为了自娱自乐,我决定尝试一下。我使用了内置的 Titanic
数据集。不过,我对您的其中一个定义有疑问:您说“如果没有唯一值,则认为它是开放式的”。但是每个长度>0 的变量都有一些唯一的值:你的意思是“如果每个值都是唯一的”?即使这个定义也不一定按预期工作:在 Titanic
数据集中,响应是整数,并且在 32 个总值中恰好只有 22 个唯一值。我不认为有人真的希望枚举它,所以我测试了 factor
的类型(但你可以用 length(u)==length(x)
如果你真的想要的话,下面一行)。
## utility function: pad vector with blanks to specified length
pad <- function(x,n,p="") {
return(c(x,rep(p,n-length(x))))
}
## process a single column
proc_col <- function(x,nm) {
u <- unique(x)
## if (length(u)==length(x)) {
if (!is.factor(x)) {
n <- 1
u <- "open ended"
cc <- ""
} else {
cc <- as.numeric(u)
n <- length(u)
}
dd <- data.frame(`Variable Name`=pad(nm,n),
`Variable Label`=pad(nm,n),
`Answer Label`=u,
`Answer Code`=cc,
`Variable Type`=pad(class(x),n),
stringsAsFactors=FALSE)
return(dd)
}
## process all columns
proc_df <- function(x) {
L <- Map(proc_col,x,names(x))
dd <- do.call(rbind,L)
rownames(dd) <- NULL
return(dd)
}
例子:
xx <- as.data.frame.table(Titanic)
proc_df(xx)
## Variable.Name Variable.Label Answer.Label Answer.Code Variable.Type
## 1 Class Class 1st 1 factor
## 2 2nd 2
## 3 3rd 3
## 4 Crew 4
## 5 Sex Sex Male 1 factor
## 6 Female 2
## 7 Age Age Child 1 factor
## 8 Adult 2
## 9 Survived Survived No 1 factor
## 10 Yes 2
## 11 Freq Freq open ended numeric
我没有在代码值列表等之前留下空格,但你可以自己进行这些调整......
关于R:是否有与 Stata 的 codebookout 命令等效的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43482592/
在 Stata 中,我可以使用 codebookout 命令创建一个 Excel 工作簿,保存现有数据集中所有变量的名称、标签和存储类型及其相应的值和值标签。 我想在 R 中找到一个等效的函数。到目前
In Stata I am able to use the codebookout command to create an Excel workbook that saves name, la
我是一名优秀的程序员,十分优秀!