R 将短宽数据框转换为长叙述性自由文本报告

R 将短宽数据框转换为长叙述性自由文本报告,r,reporting,dataframe,R,Reporting,Dataframe,我从三个数据表中导入了大约70名受试者的数据,并将它们合并到R中的一个数据框中。100个字段中的一些字段是直接的,如日期、出生、数字、手术次数、寿命和数字、手术次数12个月。其他字段,例如“注释”可能不包含值,或者可能包含一句话,甚至可能包含多句话 一些人类受试者有一个异常,这意味着某些东西缺失或不正确,对于这些人,我必须手动调查出了什么问题。当我在fix()中将数据帧作为数据帧或甚至作为表打开时,很难读取。我必须从左到右滚动,然后我必须将一些列扩展到荒谬的程度,以便只阅读一条评论 如果我能将我

我从三个数据表中导入了大约70名受试者的数据,并将它们合并到R中的一个数据框中。100个字段中的一些字段是直接的,如日期、出生、数字、手术次数、寿命和数字、手术次数12个月。其他字段,例如“注释”可能不包含值,或者可能包含一句话,甚至可能包含多句话

一些人类受试者有一个异常,这意味着某些东西缺失或不正确,对于这些人,我必须手动调查出了什么问题。当我在fix()中将数据帧作为数据帧或甚至作为表打开时,很难读取。我必须从左到右滚动,然后我必须将一些列扩展到荒谬的程度,以便只阅读一条评论

如果我能将我需要探索和报告的5名患者分为几组,并将其作为自由流动的文本进行报告,那就更好了。我想我可以通过导出到csv来做到这一点,但很难看到哪些字段是什么。例如2001-01-05,12,4,在仍然住在洛杉矶的时候做了测试。这很简单,想象一下如果有100个字段,很多是数字,很多是日期,还有几个不同的注释字段会发生什么

更好的方法是输出这样的报告:
出生日期:2001-01-05,手术次数。寿命:12,手术次数。12个月:4,评论:将于周一与我们联系
5条记录中的每一条都将遵循该格式。
字段名称1:字段1值记录1,字段名称2:字段2值记录1…
跳过一行(或容易看到的内容)
字段名称1:字段1值记录2,字段名称2:字段2值记录2

我该怎么做?

签出库(重塑)。我认为,如果你开始融化你的数据,你的脚就会走上通往你想要的结果的道路。让我们知道这样做是否有帮助,以及如何进行。

这个怎么样

set.seed(1)
age <- abs(rnorm(10, 40, 20)) 
patient.key <- 101:110
date.birth <- as.Date("2011-02-02") - age * 365
number.surgeries.12months <- rnbinom(10, 1, .5)
number.surgeries.lifetime <- trunc(number.surgeries.12months * (1 + age/10))
comments <- "comments text here"
data <- data.frame(patient.key, 
                   date.birth, 
                   number.surgeries.12months, 
                   number.surgeries.lifetime, 
                   comments)
set.seed(1)

年龄虽然我冒着重复自己的风险,但我将为RMySQL包提供另一个案例。您将能够使用您最喜欢的SQL客户端编辑数据库(我推荐)。使用SELECT语句/筛选,然后对其进行编辑。比如说

SELECT patentid, patentname, inability FROM patients LIMIT 5 

只能显示所需的字段。使用漂亮的SQL客户机,您可以直接编辑结果并将结果存储到数据库中。之后,您可以将数据库重新加载到R中。我知道很多人会认为您的数据集对于这样的开销来说太小了,但我仍然更喜欢R的大多数SQL编辑器的编辑属性。如果连接表变得更复杂,这同样适用于连接表。另外,您可能会对编写视图(“在访问时更新的表”)感兴趣,这些视图将被视为R中的表。

重塑或重塑2没有帮助。它确实让数据变得很长。然而,它太长了,从主题故事的开始一直滚动到结尾。此外,所有因子变量都引用为级别编号,而不是值。所以我们看到性别是1和2,而不是男性和女性。这些都是可以解决的问题。我不认为它们有损于我回答的实质内容。R的乐趣在于数据体操!您可以在melt()之前将因子转换为字符串,并可以汇总结果和检查其子集。我曾考虑过将数据导出到一些简单的工具,例如Microsoft Access of LibreOffice base,并使用其向导创建报告。有几种方法可以设置报告,以便数据库中的一行可以显示在多行上。但即使这样,人们也会做出一些空间安排,而不知道在其中一个评论字段中会得到长评论还是短评论。
# paste the column name next to each data field
taggeddata <- apply(subdata, 1, 
                    function(row) paste(colnames(data), row, sep = ":"))
# paste all the data fields into one line of text
textdata <- apply(taggeddata, 2, 
                  function(rec) do.call("paste", as.list(rec)))
# write to a file or to screen
writeLines(textdata)
SELECT patentid, patentname, inability FROM patients LIMIT 5