ä¿é™©ä¸èžåŒ–/ dcast一步到ä½

时间:2016-01-22 10:28:34

标签: r data.table

我有以下$isi = $html->find("div[id=table]", 0)->plaintext;

data.table

我需è¦ä¸ºæ¯ä¸ªlibrary(data.table) testdt <- data.table(var1=rep(c("a", "b"), e=3), p1=1:6, p2=11:16) # var1 p1 p2 #1: a 1 11 #2: a 2 12 #3: a 3 13 #4: b 4 14 #5: b 5 15 #6: b 6 16 设置æ¯ä¸ªvar1的中间值,p*应该在行中,并且列中的p*的唯一值ä¸åŒã€‚登记/> 所以,我正在寻找这个输出:

var1

我å‘现获得它的最简å•æ–¹æ³•æ˜¯ï¼š

 variable  a  b
1       p1  2  5
2       p2 12 15

但我有一ç§æ„Ÿè§‰ï¼Œæˆ‘在这里é—æ¼äº†ä¸€äº›ä¸œè¥¿ï¼ˆæ¯”如最适åˆçš„功能),所以我很想知é“一ç§ç›´æŽ¥çš„æ–¹å¼ï¼ˆç‹¬ç‰¹çš„功能)æ¥åšåŒæ ·çš„事情。

æˆ‘çŸ¥é“ reshape2 程åºåŒ…dcast(melt(testdt, id.vars = "var1", measure.vars = c("p1", "p2")), variable ~ var1, value.var = "value", fun.aggregate = median) å¯ä»¥ä½¿ç”¨recast执行此æ“作,但我想é¿å…加载å¦ä¸€ä¸ªç¨‹åºåŒ…。< / p>

编辑:

我正在寻找既简å•åˆé«˜æ•ˆçš„解决方案。这将应用于约40个表的列表,其中包å«~300列和~80è¡Œ

1 个答案:

答案 0 :(得分:1)

如果速度是主è¦è€ƒè™‘因素,如果首先计算median,则速度会略微æ高约23%(尽管以毫秒为å•ä½ï¼‰ã€‚éšç€æ•°æ®é›†çš„大å°å¢žåŠ ï¼Œè¿™ä¸ªå¢žé‡ä¹Ÿå¯èƒ½ä¼šå¢žåŠ ï¼Œå› ä¸ºè¦èžåŒ–çš„æ•°æ®è¾ƒå°‘。

library(data.table)
dcast(melt(testdt[, lapply(.SD, median), by=var1], id.vars="var1"), variable ~ var1))

基准

Unit: milliseconds

expr                         min       lq    mean   median       uq      max neval
fun.aggregate = median  4.221654 4.453063 4.87418 4.510775 4.579718 35.28569  1000
lapply(.SD, median)     3.196289 3.410711 3.77483 3.461073 3.523096 22.78637  1000
相关问题