如何在R中将列值转换为列名?

要将列值转换为列名,我们可以使用reshape2包的dcast函数。例如,如果我们有一个名为df的数据框,其中包含两列,即x和y,其中x是分类的,而y是数字的。现在,如果要将x中的类别转换为列名,则可以将其转换为dcast(df,y〜x)。

例1

考虑以下数据帧-

> x1<-sample(c("A","B","C"),20,replace=TRUE)
> x2<-rpois(20,5)
> df1<-data.frame(x1,x2)
> df1
输出结果
   x1 x2
1   B  4
2   A  2
3   A  5
4   C  3
5   A  7
6   A  4
7   C  6
8   A  5
9   B  4
10  B  3
11  B  7
12  A  8
13  C  2
14  B  4
15  A  5
16  C  5
17  A  6
18  C  1
19  A  6
20  C  3

加载reshape2包并将x1中的值转换为列名-

> library(reshape2)
> dcast(df1,x2~x1)

使用x2作为值列:用于value.var覆盖。

缺少聚合函数:默认为长度

输出结果

   x2 A B C
1  1 0 0 1
2  2 1 0 1
3  3 0 1 2
4  4 1 3 0
5  5 3 0 1
6  6 2 0 1
7  7 1 1 0
8  8 1 0 0

例2

> Gender<-sample(c("Male","Female"),20,replace=TRUE)
> Rate<-rpois(20,3)
> df2<-data.frame(Gender,Rate)
> df2
输出结果
   Gender Rate
1    Male    2
2    Male    5
3  Female    6
4  Female    3
5    Male    5
6    Male    1
7    Male    5
8    Male    2
9  Female    3
10 Female    2
11   Male    2
12   Male    3
13 Female    6
14   Male    0
15   Male    5
16 Female    4
17   Male    3
18 Female    5
19   Male    4
20 Female    3

将Gender中的值转换为列名-

> dcast(df2,Rate~Gender)

使用“将比率作为值”列:用于value.var覆盖。 

缺少聚合函数:默认为长度

输出结果

   Rate Female Male
1    0      0    1
2    1      0    1
3    2      1    3
4    3      3    2
5    4      1    1
6    5      1    4
7    6      2    0