【发布时间】:2018-03-29 08:37:34
【问题描述】:
我有以下数据集:
Name Make_Miss Half
Player A 1 1
Player B 1 1
Player A 0 2
Player A 0 1
Player A 1 1
Player B 0 2
其中 Name 是球员的名字,Make_Miss 是球员是否投篮,Half 是投篮发生的一半。我目前正在使用以下代码来计算上半场的投篮次数。
代码:
dt[ , Player_First_Made := .N, by = list(dt$Name == "Player A" & dt$Half == 1 & dt$Make_Miss == 1)]
输出:
Name Make_Miss Half Player_First_Made
Player A 1 1 2
Player B 1 1 4
Player A 0 2 4
Player A 0 1 4
Player A 1 1 2
Player B 0 2 4
这里发生的情况是,只要玩家 A 在 Make_Miss 列中输入 0,那么 Player_First_Made 列中的相应行就会被分配与列表中的条件不匹配的投篮计数值(即名称!= Player A or Half != 1 or Make_Miss != 1);但是,我的愿望如下:
Name Make_Miss Half Player_First_Made
Player A 1 1 2
Player B 1 1 4
Player A 0 2 2
Player A 0 1 2
Player A 1 1 2
Player B 0 2 4
我希望匹配 Name = Player A 的行始终具有他们上半场投篮次数的值。是否有某种我可以指定此分配的 data.table 语法?
【问题讨论】:
-
您的 Half 数据与您的输出以及您的 Name 列不匹配
-
您的代码
dt[ , Player_First_Made := .N, by = list(dt$Name == "Player A" & dt$Half == 1 & dt$Make_Miss == 1)]不会创建输出。另外,您的输入数据集中的Player C发生了什么? -
那是我的错误。我道歉。我一开始是三名球员,但我想把它改成两名,因为我觉得这让我的问题更加明显。我显然忘了更改第一个。
标签: r data.table