【问题标题】:In R, how do you add a string or characters to only the first number of rows of the data frame在 R 中,如何仅将字符串或字符添加到数据框的前几行
【发布时间】:2021-08-30 13:19:09
【问题描述】:

我有一个这样的日期列:
id

我只想在前 2 行的末尾添加“20”并创建一个新列以使数据框看起来像这样:

id  date               new_date
1   4 May 20           4 May 2020

2   5 June 20        5 June 2020

3   16 April 2021      16 April 2021

【问题讨论】:

    标签: r loops for-loop if-statement


    【解决方案1】:

    @akrun 已经回答了您提出的问题,但如果您真正要做的是尝试解析日期,lubridate::dmy 可以很容易地解决您的问题:

    library(lubridate)
    data$new_date <- dmy(data$date)
    data
      id          date   new_date
    1  1      4 May 20 2020-05-04
    2  2   5 June 2020 2020-06-05
    3  3 16 April 2021 2021-04-16
    

    数据

    data <- structure(list(id = 1:3, date = c("4 May 20", "5 June 2020", 
    "16 April 2021")), class = "data.frame", row.names = c(NA, -3L
    ))
    

    【讨论】:

      【解决方案2】:

      我们可以使用sub 来匹配字符串末尾($)的空格(\\s+)后跟两位数字(\\d{2}),捕获为分组((...))并在替换,插入 20 后跟捕获组的反向引用 (\\1)

      df1$date <- sub("\\s+(\\d{2})$", " 20\\1", df1$date)
      

      如果 OP 只想对原始数据上的行子集执行此操作,即预先确定

      df1$date[1:10] <- sub("\\s+(\\d{2})$", " 20\\1", df1$date[1:10])
      

      -输出

       df1
        id          date
      1  1    4 May 2020
      2  2   5 June 2020
      3  3 16 April 2021
      

      数据

      df1 <- structure(list(id = c(1, 2, 3), date = c("4 May 20", "5 June 20", 
      "16 April 2021")), class = "data.frame", row.names = c(NA, -3L
      ))
      

      【讨论】:

      • 这不是我想要的,但不知何故它有效。谢谢。
      • @KhanhN 我在看你期望回答这个问题。在您的帖子中,前 2 行提到了它,我发现这些元素最后只有 2 个数字的模式。因此,使用了sub
      • 对。我期待有一个带有 ifelse 语句的 for 循环,如下所示: for(i in nrow(df)){df[i, "new_date"]
      • @KhanhN 如果它是前 10 个,则只是索引的子集df1$date[1:10] &lt;- sub("\\s+(\\d{2})$", " 20\\1", df1$date[1:10])
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      相关资源
      最近更新 更多