如何在R中每个级别将数据帧因子列扩展为一列?

时间:2014-10-15 20:07:53

标签: r dataframe calculated-columns

我想要实现的目标是获取一个数据框列,这是一个因素,为每个级别创建一个新列,并使用原始数据框中该级别的相应值填充该列。

这是一个示例。在这种情况下,我想为the.name因子列的每个级别创建一个新列,如下所示:

原始数据框:

symbol        the.name          cn    
SYM1          ABC               1
SYM2          ABC               2
SYM1          DEF               3
SYM2          DEF               4

产生的数据框:

symbol       ABC       DEF
SYM1         1         3
SYM2         2         4

如何做到这一点?


编辑:我尝试使用sapply循环来实现此目标,然后使用split列,然后rbind结果。但是,我没有让它工作,并选择不将它添加到这个问题,因为它会产生噪音 - 我很确定这种方法不正确,可以大大改进。

3 个答案:

答案 0 :(得分:5)

这是dcast包中reshape2的作业:

> dcast(df, symbol~the.name, value.var="cn")
  symbol ABC DEF
1   SYM1   1   3
2   SYM2   2   4

答案 1 :(得分:5)

这是一项重塑任务(从长数据到宽数据)。包reshape2有一些很棒的实用工具可以做到这一点。

txt="symbol        the.name          cn    
      SYM1          ABC               1
      SYM2          ABC               2
      SYM1          DEF               3
      SYM2          DEF               4"

tmp <- read.table(text=txt, header=TRUE)

library(reshape2)
dcast(tmp, symbol ~ the.name)   ## as easy as that

答案 2 :(得分:5)

或者,newish tidyr包提供了“spread”功能。使用@ ilir的数据

> tidyr::spread(tmp, key = the.name, value = cn)
  symbol ABC DEF
1   SYM1   1   3
2   SYM2   2   4