我有以下给出的数据。想将数据从“年份”列转换为现在的年龄(年数)。
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的开始时间。但无法找到差异。
如果可以从给定数据中找到年数,您能告诉我吗?我该怎么做才能找到上一年(年)专栏的年龄。
答案 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