[英]Manual prediction in R (data frame)
我有数据框:
DF
Chset Choices X1 X2 utility
1 1 8 1 1 2
2 1 2 0 1 3
3 1 1 1 0 -1
4 2 1 1 1 2
5 2 5 0 1 5
6 2 1 1 0 -1
7 2 2 0 0 0
8 3 1 1 1 2
9 3 2 0 1 6
10 3 5 1 0 -1
11 4 6 1 1 2
12 4 1 0 1 14
13 4 1 1 0 -1
14 4 1 0 0 0
我想创建一列“预测”,如果Chset中的实用程序最大,则在其中放置1。 例如,我们有3行,其中Chset = 1,这些行具有实用程序(2,3,-1)。 然后,在第2行的“预测”列中应为(0,1,0)-1,因为它在Chset = 1中具有最大效用,依此类推:
Chset Choices X1 X2 utility predict
1 1 8 1 1 2 0
2 1 2 0 1 3 1
3 1 1 1 0 -1 0
4 2 1 1 1 2 0
5 2 5 0 1 5 1
6 2 1 1 0 -1 0
7 2 2 0 0 0 0
8 3 1 1 1 2 0
9 3 2 0 1 6 1
10 3 5 1 0 -1 0
11 4 6 1 1 2 0
12 4 1 0 1 14 1
13 4 1 1 0 -1 0
14 4 1 0 0 0 0
之后,我想检查一下预测是否正确。 如果predict = 1,并且“ Choices”列中的值是其“ Chset”中的最大值,则该预测是正确的。 例如,在Chset = 1中,我们可以看到第二行的“预测” = 1,而在Chset = 1中的最大“选择”位于第一行(等于8),因此预测不正确。 相反,在Chset = 2中,第5行的“预测”等于1,并且此行在此Chset = 2内具有“ Choices”的最大值,因此此处的预测是正确的。 为了检查所有情况,我想创建表“ cheak”,如果预测正确,则等于1,反之亦然,等于0。 最后,我应该得到:
Chset Choices X1 X2 utility predict cheak
1 1 8 1 1 2 0 0
2 1 2 0 1 3 1 0
3 1 1 1 0 -1 0 0
4 2 1 1 1 2 0 0
5 2 5 0 1 5 1 1
6 2 1 1 0 -1 0 0
7 2 2 0 0 0 0 0
8 3 1 1 1 2 0 0
9 3 2 0 1 6 1 0
10 3 5 1 0 -1 0 0
11 4 6 1 1 2 0 0
12 4 1 0 1 14 1 0
13 4 1 1 0 -1 0 0
14 4 1 0 0 0 0 0
我怎样才能做到这一点?
等待您的帮助
这应该做
DF <-
unsplit(lapply(split(DF, DF$Chset),
function(x) within(x, {
predict <- as.numeric(utility == max(utility))
check <- as.numeric(Choices == max(Choices) & predict == 1)
})),
DF$Chset)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.