how to transform this dataframe to long format

北城以北 提交于 2019-12-11 19:07:06

问题


I have a dataframe looking like this:

a <- c("Lilo","Chops","Henmans")
a <- cbind(a,c(0.1,0.5,0.25),c(0.2,0.3,0.65),c(0.7,0.2,0.1))
colnames(a) <- c("market","Product A","Product B","Product C")

and would like to melt it:

b <- melt(a, varnames = c("market"))

this gives the following:

> b
   market        NA   value
1       1    market    Lilo
2       2    market   Chops
3       3    market Henmans
4       1 Product A     0.1
5       2 Product A     0.5
6       3 Product A    0.25
7       1 Product B     0.2
8       2 Product B     0.3
9       3 Product B    0.65
10      1 Product C     0.7
11      2 Product C     0.2
12      3 Product C     0.1
> 

However, want I'm looking for is

> b
    market        NA value
4     Lilo Product A   0.1
5    Chops Product A   0.5
6  Henmans Product A  0.25
7     Lilo Product B   0.2
8    Chops Product B   0.3
9  Henmans Product B  0.65
10    Lilo Product C   0.7
11   Chops Product C   0.2
12 Henmans Product C   0.1

How do I achieve this using melt?


回答1:


Try using rownames instead of a seperate column market. This way you get a numeric matrix and you can use melt very simple as follows:

a <- cbind(c(0.1,0.5,0.25),c(0.2,0.3,0.65),c(0.7,0.2,0.1))
rownames(a) <- c("Lilo","Chops","Henmans")
colnames(a) <- c("Product A","Product B","Product C")

a now looks like this:

        Product A Product B Product C
Lilo         0.10      0.20       0.7
Chops        0.50      0.30       0.2
Henmans      0.25      0.65       0.1

You can access the "markets" by using rownames(a).

Melt now works as follows (which uses melt.array to perform the reshape):

melt(a)
     Var1      Var2 value
1    Lilo Product A  0.10
2   Chops Product A  0.50
3 Henmans Product A  0.25
4    Lilo Product B  0.20
5   Chops Product B  0.30
6 Henmans Product B  0.65
7    Lilo Product C  0.70
8   Chops Product C  0.20
9 Henmans Product C  0.10


来源:https://stackoverflow.com/questions/33982787/how-to-transform-this-dataframe-to-long-format

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!