按索引

时间:2017-05-16 10:58:43

标签: r dataframe

我尝试做的是获取一个数据框,其中第一列中的重复行充当复制其他列的相应行的索引。我知道这听起来很混乱,我无法准确说明问题是我遇到这么多问题的原因之一。 我将在下面提供一个可重现的例子。

structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 
16L, 17L), .Label = c("2016-01", "2016-02", "2016-03", "2016-04", 
"2016-05", "2016-06", "2016-07", "2016-08", "2016-09", "2016-10", 
"2016-11", "2016-12", "2017-01", "2017-02", "2017-03", "2017-04", 
"2017-05"), class = "factor"), Var2 = structure(c(1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L
), .Label = c("B2B", "B2C", "B2K"), class = "factor"), Freq = c(5L, 
13L, 8L, 13L, 36L, 5L, 18L, 1L, 12L, 24L, 22L, 6L, 24L, 15L, 
11L, 26L, 1L, 338L, 285L, 291L, 232L, 142L, 42L, 92L, 9L, 46L, 
34L, 45L, 35L, 30L, 31L, 36L, 56L, 9L, 0L, 1L, 0L, 0L, 0L, 0L, 
7L, 0L, 13L, 0L, 1L, 0L, 0L, 0L, 0L, 2L, 0L)), .Names = c("Var1", 
"Var2", "Freq"), class = "data.frame", row.names = c(NA, -51L
))
基本上我想要的是:

  • 在Var1上没有重复日期
  • 在重复日期的行上,取Var2和Freq的值,并将它们分成两个新列复制到唯一日期的索引
  • 必须针对Var2的每个不同级别进行此操作

提前谢谢!

2 个答案:

答案 0 :(得分:2)

我认为你试图解释的是dcast。这最终会以你想要的方式结束吗?

library(reshape2)
dcast(x,Var1~Var2,value.var="Freq")

答案 1 :(得分:1)

base R选项

xtabs(Freq~Var1 + Var2, df1)