我有一個150000行長格式的數據框,其中有多個相同的id變量。我正在使用reshape(來自stat,而不是package = reshape(2))將其轉換爲寬格式。我正在生成一個變量來計算每個id的給定級別的出現以用作索引。枚舉因子級別的實例
我已經有了一個使用plyr的小型數據框的工作,但對於我的完整df來說這太慢了。我可以更有效地編程嗎?
我一直在努力做到這一點與重塑包,因爲我有大約30個其他變量。對於每個單獨的分析,最好只重塑我正在查看的內容(而不是整個DF)。
> # u=id variable with three value variables
> u<-c(rep("a",4), rep("b", 3),rep("c", 6), rep("d", 5))
> u<-factor(u)
> v<-1:18
> w<-20:37
> x<-40:57
> df<-data.frame(u,v,w,x)
> df
u v w x
1 a 1 20 40
2 a 2 21 41
3 a 3 22 42
4 a 4 23 43
5 b 5 24 44
6 b 6 25 45
7 b 7 26 46
8 c 8 27 47
9 c 9 28 48
10 c 10 29 49
11 c 11 30 50
12 c 12 31 51
13 c 13 32 52
14 d 14 33 53
15 d 15 34 54
16 d 16 35 55
17 d 17 36 56
18 d 18 37 57
>
> library(plyr)
> df2<-ddply(df, .(u), transform, count=rank(u, ties.method="first"))
> df2
u v w x count
1 a 1 20 40 1
2 a 2 21 41 2
3 a 3 22 42 3
4 a 4 23 43 4
5 b 5 24 44 1
6 b 6 25 45 2
7 b 7 26 46 3
8 c 8 27 47 1
9 c 9 28 48 2
10 c 10 29 49 3
11 c 11 30 50 4
12 c 12 31 51 5
13 c 13 32 52 6
14 d 14 33 53 1
15 d 15 34 54 2
16 d 16 35 55 3
17 d 17 36 56 4
18 d 18 37 57 5
> reshape(df2, idvar="u", timevar="count", direction="wide")
u v.1 w.1 x.1 v.2 w.2 x.2 v.3 w.3 x.3 v.4 w.4 x.4 v.5 w.5 x.5 v.6 w.6 x.6
1 a 1 20 40 2 21 41 3 22 42 4 23 43 NA NA NA NA NA NA
5 b 5 24 44 6 25 45 7 26 46 NA NA NA NA NA NA NA NA NA
8 c 8 27 47 9 28 48 10 29 49 11 30 50 12 31 51 13 32 52
14 d 14 33 53 15 34 54 16 35 55 17 36 56 18 37 57 NA NA NA
在您的示例中,列名和因子都是'a','b','c'和'd' - 如果它們具有不同的名稱,可能會使示例更容易遵循 – user295691
@ user295691 - 好點子。已改名。 – Ewen
只是爲了澄清 - 你的實際問題是......「有沒有更快的方式來做重塑步驟?」爲了加快創建變量計數(在我的測試中,速度提高20到30倍),可以使用'ave()':'df2 < - (df,ave(as.numeric(u), u,FUN = seq_along) })'。除此之外,可能會有多少實際的「u」水平?寬格式數據集將如何幫助您?我想可以想象,有超過150萬的專欄,瀏覽它將是一場噩夢!如果你能澄清你的最終目標和目的,你可能會得到更多有用的答案。 – A5C1D2H2I1M1N2O1R2T1