【发布时间】:2019-05-26 15:01:22
【问题描述】:
我正在尝试编写函数,该函数采用列属性并将它们转换为适当的字符串。
我的数据具有变量标签(列描述)、变量名称、类型(因子、数字、字符)和定义的因子水平(例如 1=yes,2=no)。我想使用生成字符串的函数,该字符串以适当的顺序包含所有信息:
Q B
Q [varname] vallab
T S #type
R yes
R no
Q E
我写了这样的函数:
WriteQ<-function(VarLab,VarName,Responses,VarType) {
cond<-sapply(VarType, switch,
factor="T S\n",
numeric="T I\n",
character="T C\n")
mystr<-paste0("Q B\nQ [",VarName,"] ", VarLab, "\n",cond,"L0L2\n",paste("R",Responses, collapse = "\n"),"\nQ E")
return(mystr)
}
并试图这样称呼它:
attributes(data)$qps<-WriteQ(attributes(data)$variable.labels,
attributes(data)$names,
unlist(lapply(data, attr, "levels")),
unlist(lapply(data, class)))
虽然 VarLab、VarName 和 VarType 工作正常,但我的 Responses 有问题。 它在每个部分中打印整个数据框的所有级别。我应该如何为每一列分别传递级别列表?
文件结构:
structure(list(id = c(1, 2), q23 = structure(1:2, .Label = c("yes",
"no", "don't know"), class = "factor"), gender = structure(c(1L,
1L), .Label = c("male", "female"), class = "factor"), age = c(33,
44)), row.names = 1:2, variable.labels = c("id", "Do you like flowers?",
"Select gender...", "How old are you?"), class = "data.frame")
【问题讨论】:
-
你能不能
dput(data),这样我们可以得到它的副本? -
如果没有一个好的例子很难知道,但我认为您可能需要通过在单个列上尝试该 paste() 来处理它,直到您以您需要的方式获得它。实际上,您可能希望在将其提供给您的函数之前对其进行预处理。或者创建一个从 WriteQ 函数调用的单独函数。这样会更干净,更容易测试。
-
什么是
L0L2(除了静态字符串)?
标签: r