R - 不了解60年代的时间



我正在将mm/dd/yy列转换为POSIXct变量。我以前从来没有遇到过麻烦,但我对1969年之前的任何日期都有问题,因为它转换为"68";到2068年而不是1968年。所有其他日期都可以转换!如有任何帮助,不胜感激。

library(tidyverse)
discharge <- rownames_to_column(discharge, var="date")
discharge$date <- as.POSIXct(strptime(discharge$date, format = "%m/%d/%y"))

下面是数据集放电。请让我知道,如果我错过了什么!我怀疑它不是一个字符向量…?

> dput(discharge)
structure(list(Original = c(1100L, 1030L, 982L, 703L, 587L, 512L, 
606L, 667L, 1010L, 1400L, 1220L, 1050L, 1040L, 1040L, 818L, 597L, 
616L, 631L, 708L, 801L, 1080L, 1230L, 1370L, 1390L, 1120L, 984L, 
881L, 754L, 793L, 675L, 705L, 1300L, 1160L, 1300L, 1200L, 1240L, 
1020L, 1060L, 1290L, 995L, 714L, 596L, 545L, 745L, 840L, 1060L, 
1490L, 1100L, 1010L, 1140L, 716L, 649L, 614L, 512L, 598L, 1092L, 
1276L, 1401L, 1261L, 1079L, 858L, 916L, 700L, 753L, 673L, 807L, 
670L, 1484L, 1659L, 1170L, 1080L, 1070L, 921L, 1250L, 869L, 770L, 
645L, 666L, 620L, 704L, 983L, 1030L, 1260L, 1020L, 931L, 748L, 
805L, 661L, 567L, 604L, 598L, 746L, 879L, 922L, 863L, 856L, 696L, 
584L, 497L, 559L, 571L, 636L, 815L, 1010L, 942L, 1260L, 1120L, 
972L, 1120L, 885L, 640L, 510L, 442L, 461L, 536L, 729L, 1030L, 
1050L, 1020L, 1010L, 828L, 557L, 731L, 500L, 564L, 561L, 607L, 
771L, 998L, 937L, 993L, 978L, 918L, 781L, 576L, 572L, 592L, 499L, 
676L, 723L, 846L, 1080L, 1100L, 983L, 960L, 713L, 570L, 527L, 
507L, 571L, 581L, 768L, 849L, 1030L, 1240L, 1030L, 946L, 1060L, 
757L, 693L, 556L, 669L, 609L, 776L, 924L, 1230L, 1170L, 1260L, 
1340L, 1190L, 1350L, 879L, 726L, 857L, 964L, 1030L, 1160L, 1300L, 
1260L, 1190L, 948L, 868L, 746L, 626L, 531L, 491L, 525L, 691L, 
1030L, 1170L, 1270L, 1030L, 940L, 633L, 653L, 794L, 663L, 636L, 
657L, 896L, 1030L, 1416L, 1187L, 1207L, 1167L, 894L, 831L, 681L, 
743L, 798L, 702L, 807L, 1293L, 1261L, 1308L, 1033L, 844L, 829L, 
772L, 748L, 645L, 531L, 610L, 891L, 877L, 1148L, 1099L, 1062L, 
823L, 771L, 659L, 459L, 475L, 530L, 571L, 701L, 867L, 1192L, 
1203L, 1068L, 916L, 805L, 531L, 488L, 447L, 470L, 541L, 808L, 
1068L, 1214L, 1150L, 1006L, 969L, 735L, 514L, 411L, 571L, 422L, 
488L, 633L, 845L)), class = "data.frame", row.names = c("4/1/63", 
"5/1/63", "6/1/63", "7/1/63", "8/1/63", "9/1/63", "10/1/63", 
"11/1/63", "12/1/63", "1/1/64", "2/1/64", "3/1/64", "4/1/64", 
"5/1/64", "6/1/64", "7/1/64", "8/1/64", "9/1/64", "10/1/64", 
"11/1/64", "12/1/64", "1/1/65", "2/1/65", "3/1/65", "4/1/65", 
"5/1/65", "6/1/65", "7/1/65", "8/1/65", "9/1/65", "10/1/65", 
"11/1/65", "12/1/65", "1/1/66", "2/1/66", "3/1/66", "4/1/66", 
"5/1/66", "6/1/66", "7/1/66", "8/1/66", "9/1/66", "10/1/66", 
"11/1/66", "12/1/66", "1/1/67", "2/1/67", "3/1/67", "4/1/67", 
"5/1/67", "6/1/67", "7/1/67", "8/1/67", "9/1/67", "10/1/67", 
"11/1/67", "12/1/67", "1/1/68", "2/1/68", "3/1/68", "4/1/68", 
"5/1/68", "6/1/68", "7/1/68", "8/1/68", "9/1/68", "10/1/68", 
"11/1/68", "12/1/68", "1/1/69", "2/1/69", "3/1/69", "4/1/69", 
"5/1/69", "6/1/69", "7/1/69", "8/1/69", "9/1/69", "10/1/69", 
"11/1/69", "12/1/69", "1/1/70", "2/1/70", "3/1/70", "4/1/70", 
"5/1/70", "6/1/70", "7/1/70", "8/1/70", "9/1/70", "10/1/70", 
"11/1/70", "12/1/70", "1/1/71", "2/1/71", "3/1/71", "4/1/71", 
"5/1/71", "6/1/71", "7/1/71", "8/1/71", "9/1/71", "10/1/71", 
"11/1/71", "12/1/71", "1/1/72", "2/1/72", "3/1/72", "4/1/72", 
"5/1/72", "6/1/72", "7/1/72", "8/1/72", "9/1/72", "10/1/72", 
"11/1/72", "12/1/72", "1/1/73", "2/1/73", "3/1/73", "4/1/73", 
"5/1/73", "6/1/73", "7/1/73", "8/1/73", "9/1/73", "10/1/73", 
"11/1/73", "12/1/73", "1/1/74", "2/1/74", "3/1/74", "4/1/74", 
"5/1/74", "6/1/74", "7/1/74", "8/1/74", "9/1/74", "10/1/74", 
"11/1/74", "12/1/74", "1/1/75", "2/1/75", "3/1/75", "4/1/75", 
"5/1/75", "6/1/75", "7/1/75", "8/1/75", "9/1/75", "10/1/75", 
"11/1/75", "12/1/75", "1/1/76", "2/1/76", "3/1/76", "4/1/76", 
"5/1/76", "6/1/76", "7/1/76", "8/1/76", "9/1/76", "10/1/76", 
"11/1/76", "12/1/76", "1/1/77", "2/1/77", "3/1/77", "4/1/77", 
"5/1/77", "6/1/77", "7/1/77", "8/1/77", "9/1/77", "10/1/77", 
"11/1/77", "12/1/77", "1/1/78", "2/1/78", "3/1/78", "4/1/78", 
"5/1/78", "6/1/78", "7/1/78", "8/1/78", "9/1/78", "10/1/78", 
"11/1/78", "12/1/78", "1/1/79", "2/1/79", "3/1/79", "4/1/79", 
"5/1/79", "6/1/79", "7/1/79", "8/1/79", "9/1/79", "10/1/79", 
"11/1/79", "12/1/79", "1/1/80", "2/1/80", "3/1/80", "4/1/80", 
"5/1/80", "6/1/80", "7/1/80", "8/1/80", "9/1/80", "10/1/80", 
"11/1/80", "12/1/80", "1/1/81", "2/1/81", "3/1/81", "4/1/81", 
"5/1/81", "6/1/81", "7/1/81", "8/1/81", "9/1/81", "10/1/81", 
"11/1/81", "12/1/81", "1/1/82", "2/1/82", "3/1/82", "4/1/82", 
"5/1/82", "6/1/82", "7/1/82", "8/1/82", "9/1/82", "10/1/82", 
"11/1/82", "12/1/82", "1/1/83", "2/1/83", "3/1/83", "4/1/83", 
"5/1/83", "6/1/83", "7/1/83", "8/1/83", "9/1/83", "10/1/83", 
"11/1/83", "12/1/83", "1/1/84", "2/1/84", "3/1/84", "4/1/84", 
"5/1/84", "6/1/84", "7/1/84", "8/1/84", "9/1/84", "10/1/84", 
"11/1/84", "12/1/84"))

两位数的年份是不明确的。你可以加上"19"使用正则表达式解析%Y而不是%y

library(tidyverse)
discharge %>%
rownames_to_column(var="date") %>%
as_tibble() %>%
mutate(date = strptime(sub("^(\d+/\d+/)(\d+)$", "\119\2", date), 
format = "%m/%d/%Y"))
#> # A tibble: 261 x 2
#>    date                Original
#>    <dttm>                 <int>
#>  1 1963-04-01 00:00:00     1100
#>  2 1963-05-01 00:00:00     1030
#>  3 1963-06-01 00:00:00      982
#>  4 1963-07-01 00:00:00      703
#>  5 1963-08-01 00:00:00      587
#>  6 1963-09-01 00:00:00      512
#>  7 1963-10-01 00:00:00      606
#>  8 1963-11-01 00:00:00      667
#>  9 1963-12-01 00:00:00     1010
#> 10 1964-01-01 00:00:00     1400
#> # ... with 251 more rows

由reprex包(v2.0.1)于2022-04-28创建

相关内容

最新更新