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)
我有数据框:
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)