【问题标题】:Using R to reformat data from cross-tab to one-datum-per-line format使用 R 将数据从交叉表重新格式化为每行一个数据的格式
【发布时间】:2013-08-27 00:31:52
【问题描述】:

我正在使用 R 通过 API 提取数据并将所有数据合并到一个表中,然后将其写入 CSV 文件。但是,要在 Tableau 中正确绘制它,我需要使用他们的 Excel 重新格式化工具来准备数据,以将其从交叉制表格式转换为每行仅包含一个数据的格式。例如,从格式中获取一些东西:

ID,Gender,School,Math,English,Science
1,M,West,90,80,70
2,F,South,50,50,50

收件人:

ID,Gender,School,Subject,Score
1,M,West,Math,90
1,M,West,English,80
1,M,West,Science,70
2,F,South,Math,50
2,F,South,English,50
2,F,South,Science,50

R 或 R 库中是否有任何现有工具可以让我这样做,或者可以提供一个起点?我正在尝试自动为 Tableau 准备数据,因此我只需要运行一个脚本即可将其正确格式化,并且如果可能的话,我希望删除手动 Excel 步骤。

【问题讨论】:

  • 参见reshape,reshape2 包、堆栈和相关函数。
  • 请尽量使这个问题更具体,否则很可能会被关闭。为了更好地阅读您在 R 中尝试执行的操作,请搜索 Hadley Wickham 的整洁数据。
  • 谢谢,这看起来很有希望。尝试在上面进行更新以使其更具体。
  • Tableau 是通向 R 的药物;-) 我是 Tableau 5/6/7 的忠实用户,但我发现自己需要定期使用新数据更新图表;这通常会导致 Tableau 图表发生不必要的变化,尤其是在标签等方面。我需要真正的可重复性。这促使我更仔细地研究 R 和 ggplot2,结果证明这是正确的解决方案。我可以在 Tableau 中制作的每个图表都可以在 R 中重现。我不再使用 Tableau,除了完全即席的绘图。哦,我发现每年更新 Tableau 的成本非常高昂。
  • 如果您的数据采用 Tableau 喜欢的格式,我仍然觉得 Tableau 更适合探索数据。一旦您必须开始使用 R 或他们的重塑工具进行预处理,您就会失去大量使 Tableau 与众不同的流动性。有一天,我发现自己更改了 Excel 工作表的布局,以便更轻松地导入 Tableau,并意识到可视化的尾巴正在摇摆数据狗。掌握这两个平台。

标签: r excel data-structures dataformat tableau-api


【解决方案1】:

在 R 和其他几个程序中,这个过程被称为“重塑”数据。事实上,Tableau 页面that you originally linked to 谈到了他们的“Excel Reshaper 插件”。

在基础 R 中,有一些函数可以重塑数据,例如(臭名昭著的)reshape() 函数将面板数据从宽格式转换为长格式,stack() 会创建细小的数据堆栈.

不过,对于此类数据转换,“reshape2”包似乎更受欢迎。 这是“融化”您的示例数据的示例,我将其存储在名为“mydf”的data.frame 中:

library(reshape2)
melt(mydf, id.vars=c("ID", "Gender", "School"), 
     value.name="Score", variable.name="Subject")
#   ID Gender School Subject Score
# 1  1      M   West    Math    90
# 2  2      F  South    Math    50
# 3  1      M   West English    80
# 4  2      F  South English    50
# 5  1      M   West Science    70
# 6  2      F  South Science    50

对于这个例子,base R 的reshape() 并不合适,但stack() 是合适的。在这里,我 stacked 只是最后三列:

stack(mydf[4:6])
#   values     ind
# 1     90    Math
# 2     50    Math
# 3     80 English
# 4     50 English
# 5     70 Science
# 6     50 Science

要获得您正在寻找的data.frame,您将cbind 前三列与上述输出。


作为参考,Hadley Wickham 的 Tidy Data 论文是思考数据结构如何促进进一步处理和可视化的一个很好的切入点。

【讨论】:

    猜你喜欢
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2015-03-04
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多