data.table中的条件语句

Ale*_*exR 2 r data.table

我试图使用条件语句来获取数据表中的一些变量.这是一些简化的数据,代码和结果:

> dt
   id trial  bet outcome
1: 11     1    1       6
2: 11     2  456       2
3: 11     3 3456       3
4: 11     4  456       6
5: 12     1   34       6
6: 12     2 3456       2
7: 12     3   12       4
8: 12     4  123       2

dt1=dt[,list(
nbet=nchar(bet),
if (nchar(bet)>2.5) riskybet=1 else riskybet=0,
if (grepl(outcome,bet)==TRUE) win=1 else win=0),
by='id,trial']

> dt1
   id trial nbet V2 V3
1: 11     1    1  0  0
2: 11     2    3  1  0
3: 11     3    4  1  1
4: 11     4    3  1  1
5: 12     1    2  0  0
6: 12     2    4  1  0
7: 12     3    2  0  0
8: 12     4    3  1  1
Run Code Online (Sandbox Code Playgroud)

条件语句按预期工作但没有指定的变量名'riskybet'和'win',即它们显示为V2和V3.我究竟做错了什么?

Aru*_*run 7

您正在为if/else-statement中的变量赋值.试试这个:

dt1=dt[,list(
 nbet=nchar(bet),
 riskybet = if (nchar(bet)>2.5) 1 else 0,
 win = if (grepl(outcome, bet)) 1 else 0),
    by='id,trial']

   id trial nbet riskybet win
1: 11     1    1        0   0
2: 11     2    3        1   0
3: 11     3    4        1   1
4: 11     4    3        1   1
5: 12     1    2        0   0
6: 12     2    4        1   0
7: 12     3    2        0   0
8: 12     4    3        1   1
Run Code Online (Sandbox Code Playgroud)

或者你也可以使用ifelse而不是传统的if-else.

  • @AlexR我喜欢在这种特殊情况下使用`0 +(nchar(bet)> 2.5)`或`as.numeric(nchar(bet)> 2.5)`比`if/else`更好; 或者更好的是,只需将其保留为布尔值,您执行的任何数字操作都将在以后自动转换为所需的0/1 (2认同)