在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,因爲你基本上需要一個定製/非常具體的輸出。 –