如何根据以下数据计算年龄的汇总统计信息
问题描述:
我有以下给出的数据。希望将“年份”列中的数据转换为现在的年龄(年数)。如何根据以下数据计算年龄的汇总统计信息
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日。
你能否让我知道是否有可能从给定的数据中找到年龄的年数。我如何查找上一年(年)列的年数。
答
是的,这是可能的。您只需将开始时间转换为一年,然后就可以创建一个新列。那么你应该能够减去两年的专栏。试试这个启动:
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
答
我们可以使用正则表达式来识别年份。
# 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
是以m/d/yyyy格式还是d/m/yyyy开始时间? – Jas
我意识到这并不重要,因为你只对这一年感兴趣。按照下面的答案,我假设d/m/yyyy。 – Jas