【问题标题】:Quick way to reshape [duplicate]重塑的快速方法[重复]
【发布时间】:2012-08-08 02:40:12
【问题描述】:

可能重复:
Reshape data from long to wide format R

与:

day <- c(1, 1, 2, 2)
prod <- c(1, 2, 1, 2)
cost <- c(20.1, 17.7, 15.2, 23.3)
record <- data.frame(day=day, prod=prod, cost=cost)

record
  day prod cost
1   1    1 20.1
2   1    2 17.7
3   2    1 15.2
4   2    2 23.3

什么是重塑数据的好(快速)方法:

       day_1 day_2
prod_1  20.1  15.2
prod_2  17.7  23.3

谢谢!

【问题讨论】:

  • 抱歉重复,因为我没有找到合适的词来搜索类似的问题。谢谢大家的回答!

标签: r


【解决方案1】:

我们也可以使用xtabs

xtabs(cost ~ prod + day, data = record)

    day
prod    1    2
   1 20.1 15.2
   2 17.7 23.3

【讨论】:

  • +1 我不需要复制您的答案。清理。
【解决方案2】:

为什么不使用tapply - sum 函数并不重要,因为您有唯一值:

> tapply(record$cost,list(record$prod, record$day), FUN=sum)

     1    2
1 20.1 15.2
2 17.7 23.3

【讨论】:

  • 这可能不起作用,因为在特定的一天可能缺少一些产品,但除此之外效果很好。谢谢!
  • 应该可以正常工作,您最终会在缺少数据的单元格中看到NA。这对我来说似乎是一种很好的行为。
【解决方案3】:

我认为reshape2 包中的dcast 具有最简单的语法:

library(reshape2)
dcast(prod ~ day, data=record, value.var='cost')

  prod    1    2
1    1 20.1 15.2
2    2 17.7 23.3

但是,这个问题已经被问过很多次了,很可能很快就会结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2012-04-17
    • 2012-04-13
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多