【问题标题】:Assigning Unique Values分配唯一值
【发布时间】:2020-05-17 23:42:49
【问题描述】:

我有一个数据框 (02outcomes$transfusion_date),其中有一系列日期,如下所示:

2020-03-28 18:01:00
2020-03-28 22:16:00
2020-04-01 19:30:00
2020-04-01 23:56:00

我想像这样为每个人分配唯一的 ID:

1   2020-03-28 18:01:00
2   2020-03-28 22:16:00
3   2020-04-01 19:30:00
4   2020-04-01 23:56:00

这些值需要按时间顺序升序排列。

附带说明,当我使用 dput 函数查看我的数据时,它看起来像这样,这有问题吗?:

1588635000, 1588706160, 1588714320, 1588721640, 1588881900 

我发现了一个看似相似但似乎无法使这些解决方案起作用的线程: Create an ID (row number) column

提前致谢

【问题讨论】:

  • R 中的时间戳在下面是numeric,具有一些使其显示为时间戳的属性。这对我来说似乎很自然,因为小时、秒、毫秒......只是浮点秒。所以是的,它将显示浮点数。顺便说一句:最好给我们明确的数据,例如 dput 的输出(这是完全明确的)。
  • 您的样本数据......完全无趣,因为合法的答案可能是seq_len(nrow(`02outcomes`))(顺便说一句,在许多情况下,这个名字很难使用)。如果您关心具有相同 id 的重复时间戳,请更新您的示例。

标签: r uniqueidentifier


【解决方案1】:

transfusion_date 排列数据,然后您可以为每一行创建唯一索引。

在base R中,你可以这样做:

outcomes <- outcomes[order(outcomes$transfusion_date), ]
outcomes$ID <- seq_len(nrow(outcomes))

或者使用dplyr

library(dplyr)
outcomes %>% arrange(transfusion_date) %>% mutate(Id = row_number())

【讨论】:

    【解决方案2】:

    我觉得你可以使用order:

    outcomes$id = order(outcomes$transfusion_date)
    

    【讨论】:

      【解决方案3】:

      我们可以使用data.table。将数据转换为 'data.table' (setDT)、order 'transfusion_date' 并在行序列上分配 'Id'

      library(data.table)
      setDT(outcomes)[order(transfusion_date), Id := seq_len(.N)][]
      

      【讨论】:

        【解决方案4】:

        感谢您的意见。我用过这个

        outcomes <- outcomes[order(outcomes$transfusion_date), ]
        

        结果$ID

        【讨论】:

        • htxepidemiologist,您的回答实际上就是 RonahShah 的回答,而且由于您什么也没添加,所以 accept that answer 比试图声称自己的创意功劳要好得多。接受答案不仅为回答者提供了一些积分,而且还为有类似问题的读者提供了一些结束。尽管您只能接受一个答案,但您可以选择对您认为有帮助的人进行投票。 (如果仍有问题,您可能需要编辑您的问题并提供更多详细信息。)
        • 非常好(显然),但我非常怀疑她是否试图获得任何创意功劳。 OP 很可能只是(非常)不熟悉论坛的运作方式。
        • 谢谢,你是正确的 devsal 我没有意识到它是如何工作的。有没有办法撤消它并接受答案?
        【解决方案5】:

        你可以使用 dplyr

        library(tidyverse)
        library(lubridate)
        
        
        testing <- data.frame(dates = c(ymd_hms("2020-03-28 18:01:00"),
                                        ymd_hms("2020-03-28 22:16:00"),
                                        ymd_hms("2020-04-01 19:30:00"),
                                        ymd_hms("2020-04-01 23:56:00")))
        
        testing %>% 
          arrange(dates) %>% 
          mutate(ids = row_number())
        

        【讨论】:

        • 请考虑比tidyverse 更具体。有一些(很多?)没有安装整个元包,尽管他们可能安装了必要的组件。同样,如果我遇到这个答案,那么具体了解需要哪些包(以便控制依赖关系)会很有用。在这种情况下,我认为它只是dplyr。就像问题最好是最低要求(包括不加载不必要的包)一样,当答案同样最少时很好。只是一个想法/建议。谢谢!
        • 我不同意,加载 tidyverse 的好处之一是它确实打开了一个包的世界,因此可以回答全新的问题,如果它们足够新可以询问非常简单的东西,它们足够新,不关心包膨胀
        猜你喜欢
        • 2020-02-13
        • 2019-06-03
        • 1970-01-01
        • 1970-01-01
        • 2019-10-08
        • 1970-01-01
        • 1970-01-01
        • 2014-06-03
        • 1970-01-01
        相关资源
        最近更新 更多