2017-09-23 128 views
1

我有以下給出的數據。希望將「年份」列中的數據轉換爲現在的年齡(年數)。如何根據以下數據計算年齡的彙總統計信息

tripduration starttime stoptime  Year 
340   1/7/2017 0:00 1/7/2017 0:05 1994 
439   1/7/2017 0:02 1/7/2017 0:09 1980 
186   1/7/2017 0:04 1/7/2017 0:07 1984 
442   1/7/2017 0:05 1/7/2017 0:13 1969 
170  1/7/2017 0:07 1/7/2017 0:10 1986 

因此,要在第一線解決方案,我想從1994年,但無法找到差異減去起始時間2017年1月7日。

你能否讓我知道是否有可能從給定的數據中找到年齡的年數。我如何查找上一年(年)列的年數。

+0

是以m/d/yyyy格式還是d/m/yyyy開始時間? – Jas

+0

我意識到這並不重要,因爲你只對這一年感興趣。按照下面的答案,我假設d/m/yyyy。 – Jas

回答

1

是的,這是可能的。您只需將開始時間轉換爲一年,然後就可以創建一個新列。那麼你應該能夠減去兩年的專欄。試試這個啓動:

df <- data.frame(starttime=c("1/7/2017 0:00")) 
df 
#>  starttime 
#> 1 1/7/2017 0:00 
library(lubridate) 
#> 
#> Attaching package: 'lubridate' 
#> The following object is masked from 'package:base': 
#> 
#>  date 
year(strptime(df$starttime, "%d/%m/%Y")) 
#> Warning in strptime(df$starttime, "%d/%m/%Y"): unknown timezone 'default/ 
#> America/Vancouver' 
#> [1] 2017 

而一個基礎R解決方案(無須加載lubridate包):

df <- data.frame(starttime=c("1/7/2017 0:00")) 
df 
#>  starttime 
#> 1 1/7/2017 0:00 
strptime(df$starttime, "%d/%m/%Y")$year + 1900 
#> [1] 2017 
+0

感謝您提供詳細信息。是否有可能得到結果,而不使用庫包lubridate – Rikin

0

我們可以使用正則表達式來識別年份。

# Create example data frame 
dt <- read.table(text = "tripduration starttime stoptime  Year 
340   '1/7/2017 0:00' '1/7/2017 0:05' 1994 
       439   '1/7/2017 0:02' '1/7/2017 0:09' 1980 
       186   '1/7/2017 0:04' '1/7/2017 0:07' 1984 
       442   '1/7/2017 0:05' '1/7/2017 0:13' 1969 
       170  '1/7/2017 0:07' '1/7/2017 0:10' 1986", 
       header = TRUE, stringsAsFactors = FALSE) 

# Use regular expression to get the year in starttime 
dt$startYear <- as.numeric(gsub(".*(\\d{4}).*", "\\1", dt$starttime)) 
# Calculate the age 
dt$age <- dt$startYear - dt$Year 
dt 
    tripduration  starttime  stoptime Year startYear age 
1   340 1/7/2017 0:00 1/7/2017 0:05 1994  2017 23 
2   439 1/7/2017 0:02 1/7/2017 0:09 1980  2017 37 
3   186 1/7/2017 0:04 1/7/2017 0:07 1984  2017 33 
4   442 1/7/2017 0:05 1/7/2017 0:13 1969  2017 48 
5   170 1/7/2017 0:07 1/7/2017 0:10 1986  2017 31 
+0

我有一些空值作爲我的'年'列。我正在嘗試使用if(is.integer(df $ Year)){$ dt $ age < - dt $ startyear - dt $ year}但是,所有我的$年齡值都將以NA – Rikin

+0

使用ifelse。不要使用if。 – www