繁体   English   中英

R(数据框)中的手动预测

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM