【问题标题】:R: Produce machine-readable output for summary / describeR:为摘要/描述生成机器可读的输出
【发布时间】:2013-08-18 15:22:08
【问题描述】:

我有一个包含 10k 行和 500 列的数据框。对于每一列,我想为行中的每个唯一值创建一个计数。例如

      Fruit    Vegetable  Meat 
1     Apple    Carrot     Steak
2     Apple    Potato     Chicken
3     Pear     Peas       Duck

会产生:

Fruit;Apple;2;Pear;1
Vegetable;Carrot;1;Potato;1;Peas;1
Meat;Steak;1;Chicken;1;Duck;1

Hmisc describe 函数会产生这种分析,但输出的格式很糟糕,以致于无用。

谢谢。

【问题讨论】:

  • “无用”暗示您未描述的某些预期用途。
  • “无用” -> 不是标题中所述的机器可读格式。
  • 对不起。有时我在解析问题正文时不记得标题。

标签: r describe hmisc


【解决方案1】:
lapply(names(df),function(x){ tb <- table(df[[x]]);
      write.table(file="test.csv", append=TRUE, quote=FALSE, 
                  row.names=FALSE, col.names=FALSE, sep=";", 
                  x= paste(x, paste( names(tb), tb, collapse=";", sep=";") , 
                           sep=";") 
                  )})
#--------
fruit;Apple;2;Pear;1
veg;Carrot;1;Peas;1;Potato;1
meat;Chicken;1;Duck;1;Steak;1

您还将看到三个不会发送到文本文件的 NULL 列表。将表格和矩阵写入文件并不是 R 的强项。package::MASS 中有一个write.matrix 函数。我最初对writeLines 的尝试失败了,因为它没有“附加”选项,而且我无法拼凑一个可以执行append 的连接调用。

(R 中的另一个问题是使用 'apply/lapply/sapply' 处理列表(并通过继承数据帧)不会传递列表元素的 names(以及数据帧的 colnames)到函数,所以“写”函数在内部没有用于写入文件的名称。这就是我使用names(df) 而不仅仅是df 的原因。

进一步说明,可能有 JSON 写入函数,它们可能更可靠。我会看看并报告。

有RJSONIO包:

> require(RJSONIO)
Loading required package: RJSONIO
> toJSON(df)
[1] "{\n \"fruit\": [ \"Apple\", \"Apple\", \"Pear\" ],\n\"veg\": [ \"Carrot\", \"Potato\", \"Peas\" ],\n\"meat\": [ \"Steak\", \"Chicken\", \"Duck\" ] \n}"

【讨论】:

  • 这对我来说并不重要,但您可以投票和“检查”答案。
【解决方案2】:

你可以通过apply运行table函数

例如

fruit <- c("Apple", "Apple", "Pear")
veg <- c("Carrot", "Potato", "Peas")
meat <- c("Steak", "Chicken", "Duck")
df <- data.frame(fruit, veg, meat)

apply(df, 2, table)

$fruit

Apple  Pear 
    2     1 

$veg

Carrot   Peas Potato 
     1      1      1 

$meat

Chicken    Duck   Steak 
      1       1       1

【讨论】:

  • 谢谢,虽然输出仍然无法使用,但这样会更好,例如对于国家,我得到一个二维矩阵。有没有办法强制每行一个结果?阿富汗 阿尔巴尼亚 阿尔及利亚 5 6 4 阿根廷 亚美尼亚 澳大利亚 1 2 3 奥地利 阿塞拜疆 比利时 3 1 20
  • 如果你的例子不够复杂,你应该修改它以说明问题。完全不清楚为什么这个输出是“不可用的”。这些不是“二维矩阵。它们是带有名称的一维表,这正是给定向量作为输入的表函数所期望的。
  • DWin - 那么您如何建议我将那些“带名称的一维表”转换为 CSV/JSON 格式,如最初问题中所述?此外,当一个更简单的示例就足够时,我不会在 SO 上给出 10k 行和 250 列的示例。
  • DWin,不太确定我是否理解...强制每行一个结果是什么意思?
  • 我是这里的 R 新手,似乎 R 设置为很好地格式化结果,因此通过插入多个空格来垂直对齐内容,它们在视觉上很有吸引力。但是,无法导出这些结果或用另一种语言对它们进行任何操作。我想要的(正如我现在多次重申的)是 describe 函数的机器可读输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 2011-02-25
  • 1970-01-01
相关资源
最近更新 更多