如何将此数据框转换为长格式
how to transform this dataframe to long format
我有一个如下所示的数据框:
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")
想把它融化:
b <- melt(a, varnames = c("market"))
这给出了以下内容:
> 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
>
不过,我要找的是
> 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
如何使用 melt 实现此目的?
尝试使用 rownames
而不是单独的列 market
。这样你就得到了一个数字矩阵,你可以使用 melt
非常简单,如下所示:
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 现在看起来像这样:
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
您可以使用 rownames(a)
访问 "markets"。
Melt 现在的工作方式如下(使用 melt.array
执行重塑):
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
我有一个如下所示的数据框:
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")
想把它融化:
b <- melt(a, varnames = c("market"))
这给出了以下内容:
> 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
>
不过,我要找的是
> 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
如何使用 melt 实现此目的?
尝试使用 rownames
而不是单独的列 market
。这样你就得到了一个数字矩阵,你可以使用 melt
非常简单,如下所示:
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 现在看起来像这样:
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
您可以使用 rownames(a)
访问 "markets"。
Melt 现在的工作方式如下(使用 melt.array
执行重塑):
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