Я пытаюсь использовать условные операторы для получения некоторых переменных в таблице данных. Вот некоторые упрощенные данные, код и результаты:условные операторы в 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
условные операторы работают, как они должны, но без присвоенных имен переменного «riskybet» и «победы», то есть они появляются как V2 и V3. Что я делаю не так?
Комментарий стороны: '1 * (nchar (bet)> 2.5)' - более короткий способ выражения вашего первого оператора if, а '1 * grepl (result, bet)' эквивалентный способ сделать второй. – Dennis
Я предполагаю, что оператор if работает только потому, что id и trial определяют уникальную строку. Кроме того, вы можете избежать вычисления nchar дважды ... '{nbet = nchar (bet); list (nbet = nbet, riskybet = 1 * (nbet> 2), win = 1 * grepl (результат, ставка))}' – Frank