我在爲r的數據幀DF形式R數據幀壓扁/重塑
a,1
a,4
a,2
b,6
b,8
b,4
c,4
c,5
c,2
我要代表DF形式
a,1,4,2
b,6,8,4
c,4,5,2
什麼是更快的方式做到這一點的R中的轉換,尤其是如果我的數據幀的大小更大?
我在爲r的數據幀DF形式R數據幀壓扁/重塑
a,1
a,4
a,2
b,6
b,8
b,4
c,4
c,5
c,2
我要代表DF形式
a,1,4,2
b,6,8,4
c,4,5,2
什麼是更快的方式做到這一點的R中的轉換,尤其是如果我的數據幀的大小更大?
通過使用dplyr
和reshape2
library(dplyr)
library(reshape2)
dat=dat%>%group_by(V1)%>%dplyr::mutate(id=row_number())
as.data.frame(acast(dat, V1~id,value.var="V2"))
1 2 3
a 1 4 2
b 6 8 4
c 4 5 2
數據輸入:
dat
V1 V2
1 a 1
2 a 4
3 a 2
4 b 6
5 b 8
6 b 4
7 c 4
8 c 5
9 c 2
編輯:定時
library(microbenchmark)
microbenchmark(
acastmethod=acast(dat, a~id,value.var="b"),
dcastmethod=dcast(dat, a ~ id , value.var = "b"),
tidyrmethod=spread(dat, key = id, value = b),
xtabmethod=xtabs(b ~ a + id, data = dat)
)
Unit: milliseconds
expr min lq mean median uq max neval cld
acastmethod 1.872223 2.035528 2.237846 2.210701 2.349068 3.783507 100 a
dcastmethod 3.124578 3.405817 3.626199 3.579038 3.815807 4.887430 100 b
tidyrmethod 4.025684 4.477290 4.765803 4.725326 5.035862 6.140385 100 c
xtabmethod 5.054490 5.529382 6.378615 5.714020 6.047391 61.242200 100 d
acast中的公式前後的變量是什麼? – PraneethVepakomma
@我提供我的樣本數據爲'dat' – Wen
好的。爲什麼不使用dcast而不是acast?這種方式不需要使用as.data.frame。是快速或更快? – PraneethVepakomma
這的確是一個[長寬欺騙(HTTPS: //stackoverflow.com/questions/5890584/how-to-reshape-data-from-long-to-wide格式),但沒有列名或足夠唯一的索引。它都是可以修復的,例如'庫(tidyverse); %var%>%set_names(paste0('V',1:2))%>%group_by(V1)%>%mutate(var = paste0('X',row_number()))%>%spread(var,V2 )' – alistaire