我刚刚开始编程,为提出这个简单的问题而道歉,但我被困了.
我有一个名为s3的data.table:
S3:
ClaimID dx dxgroup
15nhbfcgcda 113.8 NA
15nhbfcgcda 156.8 NA
15nhbfcgcda 110.8 059
15nhbfcfssa 135.8 NA
15nhb4dfgda V70.3 NA
15nhbf644da 118.8 042
Run Code Online (Sandbox Code Playgroud)
S3有30000行.
我想应用这个逻辑:
If dxgroup = NA(
If dx (fisrt 4 characters match with)= (2024, 2967, 9786,9788,8263)
then dxgroup = (first 4 character of dx)
else dx (fisrt 3 characters match with) = (V70, 042,897)
then dxgroup = (first 3 character of dx)
else dxgroup = dx
)
Run Code Online (Sandbox Code Playgroud)结果应该是:
ClaimID dx dxgroup
15nhbfcgcda 113.8 113.8
15nhbfcgcda 156.8 156.8
15nhbfcgcda 110.8 059
15nhbfcfssa 135.8 135.8
15nhb4dfgda V70.3 V70
15nhbf644da 118.8 042
Run Code Online (Sandbox Code Playgroud)请指教 ?
我道歉:这是我第一次在这里问一些东西,所以还不习惯.所以我做了这样的事情(我没有,如果这是正确的,我也有错误):
sample4 <-sample3 [,dxgroup:= {if(dxgroup == NA)
- {if(substring(sample3 $ dx,1,4)== list(2501,2780,4151,5301,5751,6860,7807,7890,9898,9955,9970))substring(sample3 $ dx,1,4)
- else if(substring(sample3 $ dx,1,3)== list(042,493,682,850,V72))substring(sample3 $ dx,1,3)
- else if(substring(sample3 $ dx,1,4)== list(8540,8541))substring(sample3 $ dx,1,3)
- 否则if(substring(sample3 $ dx,1,3)== list(043,044))042
- 否则if(substring(sample3 $ dx,1,3)== list(789)&substring(sample3 $ dx,1,3)!= list(7891,7893,78930))7890
- 否则if(substring(sample3 $ dx,1,4)== list(7865)&substring(sample3 $ dx,1,4)!= list(78651,78652,78659))78650}
- else sample3 $ dx}] if(dxgroup == NA){:缺少值需要TRUE/FALSE的错误另外:警告消息:在if(dxgroup == NA){:条件长度> 1且只有第一个元素将被使用
你有逻辑全部设置.
请注意,对于data.table(以及几乎全部R),您可以包装jin,{curly brackets}并且括号中的最后一个语句将被分配.例如:
DT[, dxgroup := { if (clause1)
{if (foo) beebar else bar}
else chewybar
}
]
Run Code Online (Sandbox Code Playgroud)