【问题标题】:Make a new column and store unique value from another column创建一个新列并存储另一列的唯一值
【发布时间】:2021-05-05 08:02:17
【问题描述】:

我的 df 中有一个列,例如上面的 EVENTDATE,其中包含重复的日期,我希望将它们保持原样,但创建一个新列作为 ADMISSION,并且只保留 EVENTDATE 中的一个值,如上所示。 如何使用 R 实现这一点?

structure(list(ID = c(1, 1, 1, 2, 2), EVENTDATE = structure(c(18294, 
18294, 18294, 18322, 18322), class = "Date"), ADMISSION = structure(c(18294, 
NA, NA, 18322, NA), class = "Date")), row.names = c(NA, 5L), class = "data.frame")

【问题讨论】:

  • 请与dput(head(data)) 分享您的可重现数据,以便我们更有效地使用它来帮助您。
  • 现在可以看到截图了吗?
  • 为了让我们帮助您,请提供reproducible 示例。例如,要生成最小数据集,可以使用head()subset()。然后使用dput() 给我们一些可以立即放入R 的东西。或者,您可以使用基本 R 数据集(查看完整列表 library(help = "datasets"))。截图很糟糕,因为我们不能使用里面的数据(比如复制/粘贴)。
  • 更多关于 repex 的一般信息:stackoverflow.com/help/minimal-reproducible-example

标签: r data-wrangling


【解决方案1】:

我认为这个解决方案可能会对您有所帮助:

library(dplyr)

df2 %>%
  group_by(id) %>%
  mutate(eventdate = as.Date(eventdate, "%d/%m/%Y"), 
         ID = row_number(),
         admission = ifelse(ID == 1, as.character(eventdate), NA)) 


# A tibble: 4 x 4
# Groups:   id [2]
     id eventdate     ID admission 
  <dbl> <date>     <int> <chr>     
1     1 2020-02-02     1 2020-02-02
2     1 2020-02-02     2 NA        
3     2 2020-03-01     1 2020-03-01
4     2 2020-03-01     2 NA  

数据

df2 <- tibble::tribble(
  ~ id, ~ eventdate, 
  1, "02/02/2020", 
  1, "02/02/2020",
  2, "01/03/2020",
  2, "01/03/2020"
)

【讨论】:

    【解决方案2】:

    您可以尝试下面的基本 R 代码,使用 ave + duplicated

    transform(
      df,
      ADMISSION = ave(EVENTDATE, ID, FUN = function(x) replace(x, duplicated(x), NA))
    )
    

    【讨论】:

      猜你喜欢
      • 2023-02-23
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2022-06-14
      • 2016-03-14
      • 1970-01-01
      相关资源
      最近更新 更多