【问题标题】:Automated fill in columns in r自动填充 r 中的列
【发布时间】:2021-11-05 11:28:45
【问题描述】:

我有一个数据框(如下所示),其中“sig”列中有一些星号。

我想在有星号的最下方行上方的 sig 列的空单元格中填写星号,在这种情况下,从“H”行开始,星号将无处不在,如下所示:

我正在考虑某种 for 循环,它可以识别最下面的行,其中有一个星号,然后在上面的空单元格中填充星号可能是要走的路,但我不知道如何编码这个。

出于调试目的,我在 R 中使用

df<- data.frame("variable"= c("a","b","c","d","e","f","g","h","i","j","k"),
                "value" = c(0.04,0.03,0.04,0.02,0.03,0.02,0.02,0.01,0.04,0.1,0.02), 
                "sig" = c("*","*","*","","*","*","","*","","",""))

任何帮助将不胜感激 - 谢谢!

【问题讨论】:

    标签: r dataframe for-loop


    【解决方案1】:

    我们可以根据找到具有*的最后一个元素的索引来使用replace

    library(dplyr)
    df <- df %>%
        mutate(sig = replace(sig, seq(tail(which(sig == "*"), 1)), "*"))
    

    -输出

    df
       variable value sig
    1         a  0.04   *
    2         b  0.03   *
    3         c  0.04   *
    4         d  0.02   *
    5         e  0.03   *
    6         f  0.02   *
    7         g  0.02   *
    8         h  0.01   *
    9         i  0.04    
    10        j  0.10    
    11        k  0.02    
    

    【讨论】:

      【解决方案2】:

      另一种方式:

      df[1:max(which(df$sig == "*")), "sig"] = "*"
      

      给予:

         variable value sig
      1         a  0.04   *
      2         b  0.03   *
      3         c  0.04   *
      4         d  0.02   *
      5         e  0.03   *
      6         f  0.02   *
      7         g  0.02   *
      8         h  0.01   *
      9         i  0.04    
      10        j  0.10    
      11        k  0.02   
      

      【讨论】:

        【解决方案3】:

        另一种解决方案是使用fill,但您需要将"" 更改为NA

        library(tidyverse)
        

        数据

        df <-
          data.frame("variable"= c("a","b","c","d","e","f","g","h","i","j","k"),
                     "value" = c(0.04,0.03,0.04,0.02,0.03,0.02,0.02,0.01,0.04,0.1,0.02), 
                     "sig" = c("*","*","*","","*","*","","*","","",""))
        

        代码

        df %>% 
          mutate(sig = if_else(sig == "",NA_character_,sig)) %>% 
          fill(sig,.direction = "up")
        

        输出

           variable value  sig
        1         a  0.04    *
        2         b  0.03    *
        3         c  0.04    *
        4         d  0.02    *
        5         e  0.03    *
        6         f  0.02    *
        7         g  0.02    *
        8         h  0.01    *
        9         i  0.04 <NA>
        10        j  0.10 <NA>
        11        k  0.02 <NA>
        

        【讨论】:

          猜你喜欢
          • 2015-07-04
          • 2010-10-28
          • 1970-01-01
          • 1970-01-01
          • 2018-12-11
          • 1970-01-01
          • 2021-12-18
          • 2021-09-05
          • 2019-07-13
          相关资源
          最近更新 更多