如何更新data.table中的现有列值?

n.d*_*nce 4 r data.table

我刚刚开始编程,为提出这个简单的问题而道歉,但我被困了.

我有一个名为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且只有第一个元素将被使用

Ric*_*rta 7

你有逻辑全部设置.

请注意,对于data.table(以及几乎全部R),您可以包装jin,{curly brackets}并且括号中的最后一个语句将被分配.例如:

DT[,  dxgroup :=  { if (clause1)  
                     {if (foo) beebar else bar}
                  else chewybar
                  } 
  ]
Run Code Online (Sandbox Code Playgroud)