2017-09-23 99 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