我正在使用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步骤。
答案 0 :(得分: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
对于此示例,基数R的reshape()
不合适,但stack()
是。在这里,我stack
只编辑了最后三列:
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论文是思考数据结构如何促进进一步处理和可视化的良好切入点。