2014-09-30 35 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 
相关问题