代码之家  ›  专栏  ›  技术社区  ›  T K

在第一列中添加具有特定值的新行,然后在其余列中添加“-”

  •  2
  • T K  · 技术社区  · 2 年前

    所以我有一个数据集,我想添加一个新行(其中有70多列)。 如果可能的话,我希望第一列有城市的名称,然后该行中的每一列只有一个破折号。

    以下是一个示例数据:

    mydata = data.frame (Column1 =c("1","1","1","1","1","1","1",'1',"1","1"),
                         Column2 = c("2000-01-01","2000-01-05","2000-02-02", "2000-02-12", 
                                  "2000-02-14","2000-05-13", "2000-05-15", "2000-05-17", 
                                  "2000-05-16", "2000-05-20"),
                         Column3 = c("A","A","B","B","B","A","A","A","C","C"))
    

    请看下面我的代码。这段代码允许我在第一列中添加一行,这让我很难在其他列中添加“-”。我宁愿不列出每一列,因为我有70多列。

    mydata <- mydata %>% bind_rows(list(`Column1` = "TORONTO"),.)
    
    

    我尝试了以下方法,但不断出错。

    
    mydata <- mydata %>% bind_rows(list(`Column1` = "TORONTO"),col(2:ncol) = "-")
    
    ```
    
    Any help would be appreciated!
    
    
    2 回复  |  直到 2 年前
        1
  •  2
  •   akrun    2 年前

    我们可以使用 add_row

    library(dplyr)
    mydata %>%
      add_row(Column1 = "TORONTO", !!! setNames(rep('-', ncol(.)-1),
          names(.)[-1]))
    

    -输出

       Column1    Column2 Column3
    1        1 2000-01-01       A
    2        1 2000-01-05       A
    3        1 2000-02-02       B
    4        1 2000-02-12       B
    5        1 2000-02-14       B
    6        1 2000-05-13       A
    7        1 2000-05-15       A
    8        1 2000-05-17       A
    9        1 2000-05-16       C
    10       1 2000-05-20       C
    11 TORONTO          -       -
    

    默认情况下,它在底部添加行。如果要在某个位置添加,请指定 .before

    mydata %>%
      add_row(Column1 = "TORONTO", !!! setNames(rep('-', ncol(.)-1),
          names(.)[-1]), .before = 1)
    

    -输出

      Column1    Column2 Column3
    1  TORONTO          -       -
    2        1 2000-01-01       A
    3        1 2000-01-05       A
    4        1 2000-02-02       B
    5        1 2000-02-12       B
    6        1 2000-02-14       B
    7        1 2000-05-13       A
    8        1 2000-05-15       A
    9        1 2000-05-17       A
    10       1 2000-05-16       C
    11       1 2000-05-20       C
    

    或可能使用 summarise across c 一旦分类 - 作为第一个元素

    mydata %>%
       summarise(Column1 = c("TORONTO", Column1), across(-Column1, ~ c("-", .x)))
       Column1    Column2 Column3
    1  TORONTO          -       -
    2        1 2000-01-01       A
    3        1 2000-01-05       A
    4        1 2000-02-02       B
    5        1 2000-02-12       B
    6        1 2000-02-14       B
    7        1 2000-05-13       A
    8        1 2000-05-15       A
    9        1 2000-05-17       A
    10       1 2000-05-16       C
    11       1 2000-05-20       C
    
        2
  •  1
  •   TarJae    2 年前

    这里有一种替代方法,使用 .before replace_na 功能:

    library(dplyr)
    library(tidyr)
    
    mydata %>% 
      add_row(Column1 = "TORONTO", .before = 1) %>% 
      mutate(across(-Column1, ~replace_na(., "-")))
    
       Column1    Column2 Column3
    1  TORONTO          -       -
    2        1 2000-01-01       A
    3        1 2000-01-05       A
    4        1 2000-02-02       B
    5        1 2000-02-12       B
    6        1 2000-02-14       B
    7        1 2000-05-13       A
    8        1 2000-05-15       A
    9        1 2000-05-17       A
    10       1 2000-05-16       C
    11       1 2000-05-20       C