我知道必须有一个应用函数或ave,但我不太清楚如何做到这一点:
我有数据:
date player market
1: 1-1 1 1
2: 1-1 2 1
3: 1-1 1 2
4: 1-2 2 1
5: 1-2 3 2
6: 1-3 21 1
7: 1-4 1 1
8: 1-4 51 1
9: 1-4 1 1
10: 1-5 1 2
我还有一个空白数组,它在行上有独特的日期,列上的独特市场和第三维的独特玩家。
1
[,,1]
1 2
1-1
1-2
1-3
1-4
1-5
2
[,,2]
1 2
1-1
1-2
1-3
1-4
1-5
etc
我想从数据中填写数组。 我希望每个点= 1,如果这个人在数据中有一个条目,他有一个日期和市场组合,如果没有,则为0。例如,对于1和2,它们将填写为:
1
[,,1]
1 2
1-1 1 1
1-2 0 0
1-3 0 0
1-4 0 1
1-5 0 1
2
[,,2]
1 2
1-1 1 0
1-2 1 0
1-3 0 0
1-4 0 0
1-5 0 0
循环是不可能的。谢谢您的帮助。
答案 0 :(得分:2)
您可以将xtabs
用于此目的。临时日期,月份市场和日间玩家。
data(airquality)
tab<-xtabs(~Temp+Month+Day,airquality)
> dim(tab)
[1] 40 5 31
> str(tab)
xtabs [1:40, 1:5, 1:31] 0 0 0 0 0 0 0 0 0 0 ...
- attr(*, "dimnames")=List of 3
..$ Temp : chr [1:40] "56" "57" "58" "59" ...
..$ Month: chr [1:5] "5" "6" "7" "8" ...
..$ Day : chr [1:31] "1" "2" "3" "4" ...
- attr(*, "class")= chr [1:2] "xtabs" "table"
- attr(*, "call")= language xtabs(formula = ~Temp + Month + Day, data = airquality)
编辑: 转换为数据框架。
> head(as.data.frame(tab))
Temp Month Day Freq
1 56 5 1 0
2 57 5 1 0
3 58 5 1 0
4 59 5 1 0
5 61 5 1 0
6 62 5 1 0