将每日列数转换为每年每天的365个指标变量

时间:2013-07-01 17:36:02

标签: r

我有一个类似下面生成的数据框。 id列不唯一我还有一个365列的数据框,每天一个。 “日”列代表一年中的某一天。我希望第二个数据框的每一行都映射到id列,其中包含1s的日期,其中包含该ID,否则为0。数据不像示例数据框中那样整齐地排序。

data <- data.frame(id = 1:100, day = as.integer(runif(100, 0, 364)))

原始数据框中值为0,3和364的id的预期输出为:

    id day0 day1 day2 day3 ... day364
     1    1    0    0    1          1

我也对涉及使用data.table的解决方案持开放态度。谢谢!

2 个答案:

答案 0 :(得分:1)

根据我的评论,您只需要一个可交叉的,可以通过以下方式获得:

tab <- with(data,table(id, day))

如果您只是希望该表显示匹配的存在/不存在(即,即使多个条目对应于相同的id / day对,则单元格应为1),然后使用以下内容转换tab

tab[tab>=1] <- 1

答案 1 :(得分:0)

只是为了好玩,这是另一种解决方案:

library(reshape2)
dcast(data, id ~ day, is.integer, fill =0)