pen*_*ent 3 pivot pivot-table r
我有一个看起来有点像这样的csv(为了便于阅读而添加了标签):
Dimension, Date, Metric
A, Mon, 23
A, Tues, 25
B, Mon, 7
B, Tues, 9
Run Code Online (Sandbox Code Playgroud)
我想进行一些距离+ hclust分析,这是我以前做过的.但我喜欢(也许需要)这种格式:
Dimension, Mon, Tues
A, 23, 25
B, 7, 9
Run Code Online (Sandbox Code Playgroud)
我可以使用数据透视表在Excel中轻松完成此操作.问题是我有~1,000个维度和〜1,200个日期 - 所以源CSV大约是12M行乘3列.我希望~1,000行〜1,200列.
有没有办法在R中做这个变换?一个小Python脚本的逻辑很简单,但我不确定它将如何处理如此大的CSV - 我无法想象这是一个新问题.不想重新发明轮子!
谢谢你的任何提示:)
或者只是一个spread:
library(tidyr)
spread(df, Date, Metric)
Dimension Mon Tues
1 a 23 25
2 b 7 9
Run Code Online (Sandbox Code Playgroud)
library(microbenchmark)
microbenchmark(spread(df, Date, Metric))
Unit: milliseconds
expr min lq mean median uq max neval
spread(df, Date, Metric) 1.461595 1.491919 1.628366 1.566753 1.635374 2.606135 100
microbenchmark(suppressMessages(dcast(dt, Dimension~Date)))
Unit: milliseconds
expr min lq mean median uq max neval
suppressMessages(dcast(dt, Dimension ~ Date)) 3.365726 3.416384 3.770659 3.471678 4.011316 7.235719 100
microbenchmark(suppressMessages(dcast.data.table(dt, Dimension~Date)))
Unit: milliseconds
expr min lq
mean median uq
suppressMessages(dcast.data.table(dt, Dimension ~ Date)) 2.375445 2.52218 2.7684 2.614706 2.703075
max neval
15.96149 100
Run Code Online (Sandbox Code Playgroud)
这里没有数据表 sppressMessages
Unit: milliseconds
expr min lq mean median uq max neval
dcast.data.table(dt, Dimension ~ Date) 2.667337 3.428127 4.749301 4.0476 5.289618 14.3823 100
Run Code Online (Sandbox Code Playgroud)
这里数据表不必猜测:
microbenchmark(dcast.data.table(dt, Dimension ~ Date, value.var = "Metric"))
Unit: milliseconds
expr min lq mean median
dcast.data.table(dt, Dimension ~ Date, value.var = "Metric") 2.077276 2.118707 2.28623 2.168667
uq max neval
2.320579 5.780479 100
Run Code Online (Sandbox Code Playgroud)