【发布时间】:2017-04-21 21:24:12
【问题描述】:
我编写了一个函数,它接受任何 DataFrame 并评估每一列以返回一个汇总表。现在,对于任何属于Answer Label 列下的因素的Variable Name,我想将Variable Type 和Answer Code 向下移动一行。
示例代码:
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 NA
AnswerLabel <- if (sapply(dF, is.factor)[i]) as.vector(unique(dF[order(dF[i]),][i])) else "Open ended"
VariableName <- if (length(AnswerCode) > 1) c(colnames(dF)[i],
rep(NA,length(AnswerCode) - 1)) else colnames(dF)[i]
VariableLabel <- if (length(AnswerCode) > 1) c(colnames(dF)[i],
rep(NA,length(AnswerCode) - 1)) else colnames(dF)[i]
VariableType <- if (length(AnswerCode) > 1) c(sapply(dF, class)[i],
rep(NA,length(AnswerCode) - 1)) else sapply(dF, class)[i]
df = data.frame(VariableName, VariableLabel, AnswerLabel, AnswerCode, VariableType, stringsAsFactors = FALSE)
names(df) <- c("Variable Name", "Variable Label", "Variable Type", "Answer Code", "Answer Label")
table <- rbind(table, df)
}
rownames(table) <- 1:nrow(table)
return(table)
}
使用这个数据集MASS::anorexia,我从我的函数中得到这个输出:
Variable Name Variable Label Variable Type Answer Code Answer Label
1 Treat Treat CBT 1 factor
2 <NA> <NA> Cont 2 <NA>
3 <NA> <NA> FT 3 <NA>
4 Prewt Prewt Open ended NA numeric
5 Postwt Postwt Open ended NA numeric
期望的输出:
Variable Name Variable Label Variable Type Answer Code Answer Label
1 Treat Treat <NA> NA factor
2 <NA> <NA> CBT 1 <NA>
3 <NA> <NA> Cont 2 <NA>
4 <NA> <NA> FT 3 <NA>
5 Prewt Prewt Open ended NA numeric
6 Postwt Postwt Open ended NA numeric
【问题讨论】:
-
确保为reproducible example 提供样本输入以测试功能。
-
谢谢。我现在在我的帖子中提供了一个可重现的示例。
标签: r dataframe formatting dplyr sapply