簡體   English   中英

R:將日期變量匯總為年

[英]R: aggregate date variable into years

我的數據框的一列中有很多不同的日期。 我想匯總數據,以便只保留一年; 我不需要幾個月和幾天。 最初條目保存為integer 函數as.Date返回廢話

"0011-06-20"

代替

"11-06-2000"

所以我用as.character.Date得到了有效的結果:

as.character.Date(Training_lowNA$last_swap)
[1] "11/6/2000 "

從這些結果我現在想要刪除日期和月份,只保留年份。 或者用整數更容易做同樣的事情?

如果有一個有用的想法,我會很高興!

編輯:我的輸入數據有50,000個格式的日期條目

[9955] 8/14/2001  5/27/2001  3/16/2001                        4/13/2000 
[9961] 7/1/2000   5/18/2000  8/6/2001   7/17/2000             9/16/2001 
[9967] 10/21/2000 7/24/2001  5/6/2000   12/18/2000                      
[9973] 1/11/2001  7/31/2001                        9/17/2001  3/8/2001  
[9979]            9/30/2000                        7/12/2001  8/20/2000 
[9985]            10/20/2000 9/21/2000  9/27/2000  7/18/2000            
[9991]            10/1/2000                                             
[9997] 9/17/2001  7/22/2001  11/6/2000  5/31/2001 
[ reached getOption("max.print") -- omitted 40000 entries ]

我想要的輸出是:

[9955] 2001  2001  2001                        2000 
[9961] 2000   2000 2001   2000             2001 
[9967] 2000 2001  2000   2000                      
[9973] 2001  2001                        2001  2001  
[9979]            2000                        2001  2000 
[9985]            2000 2000  2000  2000            
[9991]            2000                                             
[9997] 2001  2001  2000  2001 

編輯#2

正如大衛在下面提到的,我嘗試了他的方法:

Training_lowNA[] <- lapply(Training_lowNA, function(x) format(as.Date(x, "%m/%d/%Y"), "%Y")). 

調試顯示:

function (x) 
{
xx <- x[1L]
if (is.na(xx)) {
    j <- 1L
    while (is.na(xx) && (j <- j + 1L) <= length(x)) xx <- x[j]
    if (is.na(xx)) 
        f <- "%Y-%m-%d"
}
if (is.na(xx) || !is.na(strptime(xx, f <- "%Y-%m-%d", tz = "GMT")) || 
    !is.na(strptime(xx, f <- "%Y/%m/%d", tz = "GMT"))) 
    return(strptime(x, f))
stop("character string is not in a standard unambiguous format")

編輯#3:

> dput(head(Training_lowNA$last_swap))
structure(c(78L, 32L, 1100L, 1019L, 522L, 265L), .Label = c("", 
"1/1/2000", "1/1/2001", "1/1/2002", "1/10/1999", "1/10/2000", 
"here follow 50,000 entries of this sort", "9/9/2000", "9/9/2001"
), class = "factor")

首先,您需要從字符串中生成正確的日期對象:

(a <- as.Date("9/21/2000", "%m/%d/%Y"))
## [1] "2000-09-21"

然后你可以提取年份:

format(a, "%Y")
## [1] "2000"

鑒於你有日期的向量,它結合成一個班輪:

format(as.Date(df$date, "%m/%d/%Y"), "%Y")

嘗試使用lubridate包中的year()函數。

請參閱此鏈接

以下是這樣做的:

dat <- c("8/14/2001", "5/27/2001", "3/16/2001", "4/13/2000", "7/1/2000", "5/18/2000", "8/6/2001", "7/17/2000", "9/16/2001", "10/21/2000", "7/24/2001", "7/24/1977", "7/24/1999")

ndat <- as.POSIXlt(dat, format="%m/%d/%Y")

as.POSIXlt(ndat)$year + 1900

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM