【发布时间】:2013-06-10 07:11:11
【问题描述】:
我正在尝试使用条件语句来获取数据表中的一些变量。这是一些简化的数据、代码和结果:
> 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”和“win”,即它们显示为 V2 和 V3。我做错了什么?
【问题讨论】:
-
附注:
1 * (nchar(bet) > 2.5)是表达第一个 if 语句的更短方式,1 * grepl(outcome, bet)是表达第二个 if 语句的等效方式。 -
我猜 if 语句之所以起作用,只是因为 id 和 trial 确定了一个唯一的行。此外,您可以避免计算 nchar 两次...
{nbet=nchar(bet);list(nbet=nbet,riskybet=1*(nbet>2),win=1*grepl(outcome,bet))}
标签: r data.table