【问题标题】:R: insert NAs in one column when variable name in another column changesR:当另一列中的变量名称发生变化时,在另一列中插入 NA
【发布时间】:2017-06-09 11:06:19
【问题描述】:

我有一个如下数据框:

library(data.table)
set.seed(1234)
DT<-data.table(x=c("a","a","a","b","b","c","c","c","d","d","d","d"),v=sample(1:4,12,replace = T))

  x v
  a 1
  a 3
  a 3
  b 3
  b 4
  c 3
  c 1
  c 1
  d 3
  d 3
  d 3
  d 3

我需要做的是有条件地替换值“v”,每次变量“x”发生变化时,如下所示:

      x v
      a 1
      a 3
      a 3
      b NA
      b 4
      c NA
      c 1
      c 1
      d NA
      d 3
      d 3
      d 3

我是必须做一个循环还是只有一个班轮来做同样的事情? 谢谢!

【问题讨论】:

    标签: r data.table na


    【解决方案1】:

    是的,有一条线:

    DT[x != shift(x), v := NA]
    
    
        x  v
     1: a  1
     2: a  3
     3: a  3
     4: b NA
     5: b  4
     6: c NA
     7: c  1
     8: c  1
     9: d NA
    10: d  3
    11: d  3
    12: d  3
    

    有关此语法的详细信息,请参阅 ?shiftthe data.table vignettes


    或者,为了避免计算 shift 和完整的 != 比较...

    DT[DT[, if (.GRP > 1L) .I[1L], by=rleid(x)]$V1, v := NA ]
    

    关注@eddi's approach to subsetting by group。详情请参阅?.GRP?.I?rleid

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多