【问题标题】:Replicate a given value for each ID in R为 R 中的每个 ID 复制给定值
【发布时间】:2020-04-30 17:06:25
【问题描述】:

我有一个这样的数据集:

ID     DATE     NUMBER
1    01-01-20     1
1    15-01-20     2
1    24-02-20     3
2    15-03-20     1
2    20-04-20     2
2    01-05-20     3

我想添加一个新列来复制每个 ID 的第一个日期的值,例如:

ID     DATE     NUMBER   NEW_DATE
1    01-01-20     1      01-01-20
1    15-01-20     2      01-01-20
1    24-02-20     3      01-01-20
2    15-03-20     1      15-03-20
2    20-04-20     2      15-03-20
2    01-05-20     3      15-03-20

我该怎么做? 谢谢大家

【问题讨论】:

    标签: r date replicate


    【解决方案1】:

    这是一个基本的 R 解决方案。 ave 将列 DATE 分组 ID 并提取每个分组向量的第一个元素。

    df1$NEW_DATE <- with(df1, ave(DATE, ID, FUN = '[', 1))
    
    #  ID     DATE NUMBER NEW_DATE
    #1  1 01-01-20      1 01-01-20
    #2  1 15-01-20      2 01-01-20
    #3  1 24-02-20      3 01-01-20
    #4  2 15-03-20      1 15-03-20
    #5  2 20-04-20      2 15-03-20
    #6  2 01-05-20      3 15-03-20
    

    数据

    df1 <- read.table(text = "
    ID     DATE     NUMBER
    1    01-01-20     1
    1    15-01-20     2
    1    24-02-20     3
    2    15-03-20     1
    2    20-04-20     2
    2    01-05-20     3
    ", header = TRUE)
    

    【讨论】:

    • 谢谢! “[”是什么意思?
    • @SabrinaG。这是要应用于ID 的每一组的函数。 extractor 函数,参见help('Extract')。然后,ave 可以将更多参数传递给它,这就是help)'ave') 中的点的意思。在这种情况下,您需要每个向量的第一个 (1) 元素。
    • @SabrinaG。有帮助的可以考虑采纳 Rui 的回答stackoverflow.com/help/someone-answers
    【解决方案2】:

    我们可以在dplyr中使用first

    df1 %>%
         group_by(ID) %>%
         mutate(NEW_DATE = first(DATE))
    

    或者duplicated中的另一个选项

    df1$NEW_DATE <- df1$DATE[!duplicated(df1$ID)][cumsum(!duplicated(df1$ID))]
    

    数据

    df1 <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 2L), DATE = structure(c(1L, 
    3L, 6L, 4L, 5L, 2L), .Label = c("01-01-20", "01-05-20", "15-01-20", 
    "15-03-20", "20-04-20", "24-02-20"), class = "factor"), NUMBER = c(1L, 
    2L, 3L, 1L, 2L, 3L)), class = "data.frame", row.names = c(NA, 
    -6L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      相关资源
      最近更新 更多