转换数据框

时间:2018-05-21 13:06:32

标签: r

给定一个名为"表"的数据框。像这样(使用value1,value2,...,value100):

 Month         Currency      value1    value2     
  Jan            euro         210       200

  Jan            dollar       120       300

  Feb            euro         100       280

  Feb            dollar       200       150

我想得到这个:

              value1             value2
 Month    euro    dollar     euro      dollar 
  Jan     210      120       200        300

  Feb     100      200       280        150

我试过这个以创建欧元和美元的列名:Table <- spread(Table,Currency)

但我收到了一个错误:

  

overscope_eval_next(overscope,expr)出错:对象&#39;&#39;找不到

你能帮助我如何获得我想要的格式吗?

2 个答案:

答案 0 :(得分:0)

data.table可能是最简单的方法:

dat <- read.table(text= " Month         Currency      value1    value2     
  Jan            euro         210       200

           Jan            dollar       120       300

           Feb            euro         100       280

           Feb            dollar       200       150", header = TRUE)

library(data.table)
dcast(setDT(dat), Month ~ Currency, value.var = c(rep(paste0("value", 1:2))))

只需将2中的c(rep(paste0("value", 1:2)))更改为最终value即可。

答案 1 :(得分:0)

您可以使用包reshape2执行此操作。

library(reshape2)

dcast(melt(Table, id.vars = c("Month", "Currency")), Month ~ Currency + variable)
#  Month dollar_value1 dollar_value2 euro_value1 euro_value2
#1   Feb           200           150         100         280
#2   Jan           120           300         210         200

数据

Table <- read.table(text = "
Month         Currency      value1    value2     
  Jan            euro         210       200
  Jan            dollar       120       300
  Feb            euro         100       280
  Feb            dollar       200       150
", header = TRUE)