代码之家  ›  专栏  ›  技术社区  ›  Recology

如何将数字与R中的日期类关联

  •  1
  • Recology  · 技术社区  · 2 年前

    我有一个带有日期列的数据框,如下所示:

    十年
    1770-1779
    1780-1789
    1770-1779
    1820-1829
    1770-1779
    1790-1799
    1800-1809
    1810-1819

    所需的输出是添加一个连续变量“时间”,如下所示:

    十年 时间
    1770-1779 1.
    1780-1789 2.
    1770-1779 1.
    1820-1829 6.
    1770-1779 1.
    1790-1799 3.
    1800-1809 4.
    1810-1819 5.

    非常感谢你。

    2 回复  |  直到 2 年前
        1
  •  2
  •   akrun    2 年前

    我们可以使用 base R 具有 factor

    df$Time <- as.integer(factor(df$Decade, levels = sort(unique(df$Decade))))
    

    -输出

    > df
         Decade Time
    1 1770-1779    1
    2 1780-1789    2
    3 1770-1779    1
    4 1820-1829    6
    5 1770-1779    1
    6 1790-1799    3
    7 1800-1809    4
    8 1810-1819    5
    

    或者另一个选择是 match

    with(df, match(Decade, sort(unique(Decade))))
    [1] 1 2 1 6 1 3 4 5
    

    数据

    df <- structure(list(Decade = c("1770-1779", "1780-1789", "1770-1779", 
    "1820-1829", "1770-1779", "1790-1799", "1800-1809", "1810-1819"
    )), class = "data.frame", row.names = c(NA, -8L))
    
        2
  •  2
  •   benson23    2 年前

    你需要的功能是 cur_group_id() 从包裹里 dplyr .

    library(dplyr)
    
    df %>% group_by(Decade) %>% mutate(Time = cur_group_id())
    
    # A tibble: 8 × 2
    # Groups:   Decade [6]
      Decade     Time
      <chr>     <int>
    1 1770-1779     1
    2 1780-1789     2
    3 1770-1779     1
    4 1820-1829     6
    5 1770-1779     1
    6 1790-1799     3
    7 1800-1809     4
    8 1810-1819     5
    

    数据

    df <- read.table(header = T, text = "
    Decade
    1770-1779
    1780-1789
    1770-1779
    1820-1829
    1770-1779
    1790-1799
    1800-1809
    1810-1819")