【问题标题】:Change a row value in a date variable更改日期变量中的行值
【发布时间】:2020-12-30 12:05:30
【问题描述】:

我有一个看起来像这样的数据集

data <- structure(list(producer_id = c("10005", "10005", "10007", "10007", 
"10007"), date = structure(c(18297, NA, 15768, 16155, NA), class = "Date")), row.names = c(NA, 
-5L), class = c("data.table", "data.frame"))

   producer_id       date
1:       10005 2020-02-05
2:       10005       <NA>
3:       10007 2013-03-04
4:       10007 2014-03-26
5:       10007       <NA>

最终数据应如下所示:

   producer_id       date
1:       10005 2020-02-05
2:       10005 2020-30-12 # changed this value
3:       10007 2013-03-04
4:       10007 2014-03-26
5:       10007       <NA>

换句话说,我想根据条件更改特定的日期值。通常我会使用数据表并做这样的事情。

data <– setDT(data)[producer_id==1005 & is.na(date),date:="2020-30-12"]
# or 
data <- setDT(data)[producer_id==1005 & is.na(date),date:=2020-30-12]

但是,虽然我没有收到任何错误,但这些方法不会转换数据。 有谁知道问题出在哪里以及如何有效地处理它(最好使用 data.table)?

非常感谢您的帮助

【问题讨论】:

    标签: r date data-manipulation


    【解决方案1】:

    由于您有“日期”类的date 列,请将替换更改为同一类。

    library(data.table)
    
    data[producer_id == 10005 & is.na(date),date := as.Date("2020-12-30")]
    data
    #   producer_id       date
    #1:       10005 2020-02-05
    #2:       10005 2020-12-30
    #3:       10007 2013-03-04
    #4:       10007 2014-03-26
    #5:       10007       <NA>
    

    【讨论】:

      【解决方案2】:

      使用dplyr

      library(dplyr)
      data %>%
          mutate(date = case_when(producer_id == 10005 & !is.na(date) ~ 
                           as.Date("2020-12-30"), TRUE ~ date))
      

      【讨论】:

        【解决方案3】:

        这是另一个data.table 选项

        data[.("10005", NA), date := as.Date("2020-12-30"), by = .EACHI, on = .(producer_id, date)]
        

        给了

           producer_id       date
        1:       10005 2020-02-05
        2:       10005 2020-12-30
        3:       10007 2013-03-04
        4:       10007 2014-03-26
        5:       10007       <NA>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-27
          • 1970-01-01
          相关资源
          最近更新 更多