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

R 如何更新data.table中的现有列值?,r,data.table,R,Data.table,我刚开始编程,很抱歉问了这个简单的问题,但我被卡住了 我有一个名为s3的data.table: s3: 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 w

我刚开始编程,很抱歉问了这个简单的问题,但我被卡住了

我有一个名为s3的data.table:

s3:

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
    )
    
  • 结果应该是:

    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
    
  • 请给我一些建议


  • 我道歉:这是我第一次在这里问问题,所以还不习惯。所以我做了这样的事情(我不知道这是否正确,我也得到了错误):

    示例4 1仅使用第一个元素

您已设置好所有逻辑

请注意,对于data.table(几乎所有的
R
),您可以将
j
包装在
{curly方括号}
中,方括号中的最后一条语句将被赋值。例如:

DT[,  dxgroup :=  { if (clause1)  
                     {if (foo) beebar else bar}
                  else chewybar
                  } 
  ]

这是一个更加友好的数据表解决方案:

library(data.table)
s3 <- data.table(s3)
s3[is.na(dxgroup) & (substring(ClaimID, 1, 3) %in% ("V70", "042", "897")), dxgroup := substring(dx, 1, 3)]
s3[is.na(dxgroup) & (substring(ClaimID, 1, 4) %in% ("2024", "2967", "9786", "9788", "8263")), dxgroup := substring(dx, 1, 4)]
s3[is.na(dxgroup), dxgroup := dx] #Default
库(data.table)

s3请分享您到目前为止所做的尝试,而不仅仅是询问代码。我很抱歉:这是我第一次在这里问问题,所以还不习惯。我在问题中添加了。
字母[]
是字母表中字母的内置向量。所以
字母[1:4]
就是
的“a”“b”“c”“d”
。您可以在命令行中键入它来查看。很抱歉,我的学习速度很慢。您好,您在问题中提到了data.table。确保您使用的是
data.table
软件包,还是将其与data.frame混淆?Hi@Zach-第三行不是填充了所有dxgroup值,从而导致最后两行无效?除非我有误解,否则我认为顺序必须颠倒。@RobertMuil我修正了我的代码-请仔细检查=太好了!描述应该是有问题的。也要进行更新,以反映这一点(最具体到最全球)。。。令人印象深刻的响应时间顺便说一句:-)@RobertMuil完成,谢谢!下次尝试“建议编辑”功能。欢迎-该功能听起来很酷,但我似乎没有-需要声誉积分?
library(data.table)
s3 <- data.table(s3)
s3[is.na(dxgroup) & (substring(ClaimID, 1, 3) %in% ("V70", "042", "897")), dxgroup := substring(dx, 1, 3)]
s3[is.na(dxgroup) & (substring(ClaimID, 1, 4) %in% ("2024", "2967", "9786", "9788", "8263")), dxgroup := substring(dx, 1, 4)]
s3[is.na(dxgroup), dxgroup := dx] #Default