【问题标题】:How to add a new column to a dataframe in condition on the previous row of the desired value to be all NAs?如何在所需值的前一行全部为 NA 的条件下向数据框添加新列?
【发布时间】:2022-11-11 06:33:44
【问题描述】:

我有这个数据框 df 和向量 z

df = data.frame(x =c(letters[1:3],NA,NA,'part1',letters[4:5],NA,NA,'part2',
letters[6:7]),
                y = c('p1','p2','p3',NA,NA,'---','p4',
'p5',NA,NA,'---','p6','p7') )


z = 5:6

我想创建一个名为score 的列,part1 得分为 5,part2 得分为 6。条件是每个前面的行部分由 NA 组成。分数列中的其他值将是 NA。感谢帮助。

预期输出

       x    y   score
1      a   p1    NA
2      b   p2    NA
3      c   p3    NA
4   <NA> <NA>    NA
5   <NA> <NA>    NA
6  part1  ---    5
7      d   p4    NA
8      e   p5    NA
9   <NA> <NA>    NA
10  <NA> <NA>    NA
11 part2  ---    6
12     f   p6    NA
13     g   p7    NA

【问题讨论】:

    标签: r dataframe if-statement multiple-columns


    【解决方案1】:

    这会将z 中的值应用于df 的行,其中x 包含“部分”:

    df$score[grepl('part', df$x)] <- z
    

    【讨论】:

      【解决方案2】:

      我会将z 重新定义为命名向量,然后您可以安全地执行以下操作:

      z = c("part1" = 5, "part2" = 6)
      df$score = z[df$x]
      
      #        x    y score
      # 1      a   p1    NA
      # 2      b   p2    NA
      # 3      c   p3    NA
      # 4   <NA> <NA>    NA
      # 5   <NA> <NA>    NA
      # 6  part1  ---     5
      # 7      d   p4    NA
      # 8      e   p5    NA
      # 9   <NA> <NA>    NA
      # 10  <NA> <NA>    NA
      # 11 part2  ---     6
      # 12     f   p6    NA
      # 13     g   p7    NA
      

      【讨论】:

        猜你喜欢
        • 2022-09-26
        • 1970-01-01
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        • 1970-01-01
        • 2018-12-27
        • 2021-03-02
        • 1970-01-01
        相关资源
        最近更新 更多