使用三个条件变换R Dataframe 中的值

zpqajqem  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(118)

我有以下数据框:

Number Letter
      1      A
     NA      B
     NA      X
      4      D
      1      A
     NA      B
     NA      C
     NA      X
      1      A
      2      B
      3      C
     NA      X

我想使用以下条件转换此 Dataframe :
1.如果“字母”列中的字母等于“X”,则“数字”列中所有前面的NA行的字母都将更改为“U”。
1.如果前面的行在“编号”列中具有数字而不是NA,则它们保持不变。
1.字母列中带有X的行不会更改。
这应产生如下所示的 Dataframe :

Number Letter
    1        A
   NA        U
   NA        X
    4        D
    1        A
   NA        U
   NA        U
   NA        X
    1        A
    2        B
    3        C
   NA        X

我怎样才能在R中做到这一点,最好使用dplyr?

jchrr9hc

jchrr9hc1#

数据表解决方案

library(data.table)

#read data
dt <- data.table(number = c(1, NA, NA, 4,1, NA, NA, NA, 1,2,3,NA),
           Letter = c("A", "B", "X", "D", "A", "B", "C", "X", "A", "B", "C","X"))

#add rows
dt[, row := 1:nrow(dt)]

#find row with last observations of x
x.maxrow <- max(dt[Letter == "X"]$row)

#in preceding rows, change Letter to U when is.na(number), with the exception of rows with Letters == "X"
dt[row < x.maxrow & Letter != "X" & is.na(number), Letter := "U"]

#remove row column
dt[, row := NULL]

相关问题