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

我想创建列 "predict",如果效用在 Chset 中最大,我会在其中放置 1。例如,我们有 3 行,其中 Chset=1,并且这些行具有实用程序 (2,3,-1)。那么,在列"predict"中第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 中,我们可以看到第 2 行 "predict"=1,而 Chset=1 中的最大值 "Choices" 在第 1 行(等于 8),因此预测不正确.相比之下,在Chset=2中,第5行"predict"等于1,而该行在这个Chset=2内有最大值"Choices",所以这里的预测是正确的。为了避免所有情况,我想创建 table "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)