【问题标题】:Convert non-missing date to missing in R将非缺失日期转换为 R 中缺失的日期
【发布时间】:2020-11-22 09:53:04
【问题描述】:

我有一个数据框,我想根据条件将每个 ID 第一行的日期列替换为缺失。

library(data.table)
table1 <- read.table("
id date1      var
1  01/02/1992  2
1  02/03/1992  1
1  01/03/1992  2
2  06/05/1992  1
", header=T, stringsAsFactors=F)

date1 <- as.Date(date1)
table1 <- data.frame(id,date1,var)

这似乎是一项简单的任务,我尝试了几个代码,但没有一个有效。我是 R 新手,所以请原谅我的行人问题。谢谢!

【问题讨论】:

  • 感谢您指出。我在帖子中进行了更正。
  • 谢谢,基于 'date1' 的格式,as.Date 需要一个 format 参数。另外,我相信您希望每个“id”的“date1”的第一个值是 NA。请检查您是否想要帖子中的解决方案

标签: r dplyr sqldf


【解决方案1】:

如果我们想将 Date 的第一个值替换为 NA,则按 'id' 分组并使用 replace

library(dplyr)
table1 <- table1 %>% 
    group_by(id) %>% 
    mutate(date1 = replace(date1, 1, NA))

如果没有订购“date1”

table1 %>%
    arrange(id, as.Date(date1, '%d/%m/%Y')) %>%
    group_by(id) %>%
     mutate(date1 = replace(date1, 1, NA))

或使用data.table

library(data.table)
setDT(table1)[, date1 := replace(date1, 1, NA), id]

【讨论】:

  • 感谢阿克伦!您能否也给我 data.table 中的解决方案?有人建议我学习 data.table 这就是我正在使用的。
  • 如果我要替换每个 ID 的第一行以外的所有内容,代码将如何更改?
  • @Pam 我们可以将replace 更改为replace(date1, -1, NA)
【解决方案2】:

你可以使用duplicated:

table1$date1[!duplicated(table1$id)] <- NA
table1

#  id      date1 var
#1  1       <NA>   2
#2  1 02/03/1992   1
#3  1 01/03/1992   2
#4  2       <NA>   1

【讨论】:

    猜你喜欢
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    相关资源
    最近更新 更多