如何根据以下数据计算年龄的摘要统计信息

时间:2017-09-23 23:06:24

标签: r

我有以下给出的数据。想将数据从“年份”列转换为现在的年龄(年数)。

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年减去1/7的开始时间。但无法找到差异。

如果可以从给定数据中找到年数,您能告诉我吗?我该怎么做才能找到上一年(年)专栏的年龄。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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