2014-09-30 50 views
5

我試圖在tidyr包中使用gather,但我無法將輸出列名從默認名名。例如:無法將「聚集」輸出的列名更改爲默認名稱以外的其他名稱

df = data.frame(time = 1:100,a = 1:100,b = 101:200) 
df.long = df %>% gather("foo","bar",a:b) 
colnames(df.long) 

給我

[1] "time"  "variable" "value" 

但它應該是"time" "foo" "bar"

我可以將「foo」和「bar」更改爲我想要的任何東西,它仍然給我「變量」和「值」作爲我的列名。

幫助。我在這裏錯過了什麼?

+0

你的代碼爲我工作。我也加載了'dplyr'。 – 2014-09-30 22:29:56

+3

嘿所有,我的問題是,我有plyr和dplyr在同一時間加載。我所需要做的就是編寫'detach(「package:plyr」)'並且代碼可以工作 – dvdkamp 2014-09-30 22:35:03

+0

@dvdkamp:有時可能無法工作,尤其是當dplyr可以通過名稱空間加載時。 – KFB 2014-10-04 02:14:18

回答

2

這可能是一個錯誤。如果你願意嘗試其他的,像data.table的熔化(),你可以做如下:

# Need to load both data.table and reshape2 
# For more information, could check ?data.table 
library(reshape2); library(data.table) 
setDT(df) 
df %>% melt(id.vars = "time", variable.name = "foo", value.name = "bar") 

> First 20 rows 
    time foo bar 
1: 1 a 1 
2: 2 a 2 
3: 3 a 3 
4: 4 a 4 
5: 5 a 5 
6: 6 a 6 
7: 7 a 7 
8: 8 a 8 
9: 9 a 9 
10: 10 a 10 
11: 1 b 11 
12: 2 b 12 
13: 3 b 13 
14: 4 b 14 
15: 5 b 15 
16: 6 b 16 
17: 7 b 17 
18: 8 b 18 
19: 9 b 19 
20: 10 b 20