在 R 中将完整年龄从字符转换为数字

Rua*_*tel 5 r lubridate stringr data-cleaning data-wrangling

我有一个数据集,其中人们的完整年龄为 R 中的字符串(例如,“10 年 8 个月 23 天)”,我需要将其转换为有意义的数字变量。我正在考虑将其转换为有多少天人的年龄(这很困难,因为月份有不同的天数)。因此,最好的解决方案可能是创建一个双变量,将年龄显示为 10.6 或 10.8,一些数字变量携带 10 年 8 个月 5 天大于的信息10年7月12天。

这是我当前变量的示例

library(tibble)

age <- tibble(complete_age = 
             c("10 years 8 months 23 days",
               "9 years 11 months 7 days",
               "11 years 3 months 1 day",
               "8 years 6 months 12 days")) 

age

# A tibble: 4 x 1
  complete_age             
  <chr>                    
1 10 years 8 months 23 days
2 9 years 11 months 7 days 
3 11 years 3 months 1 day  
4 8 years 6 months 12 days 
Run Code Online (Sandbox Code Playgroud)

这是我希望看到的可能结果的示例(带有age_num的近似值)

> age
# A tibble: 4 x 2
  complete_age              age_num
  <chr>                       <dbl>
1 10 years 8 months 23 days    10.66
2 9 years 11 months 7 days      9.92
3 11 years 3 months 1 day      11.27
4 8 years 6 months 12 days      8.52
Run Code Online (Sandbox Code Playgroud)

总之,我有一个包含“complete_age”列的数据集,并且我想创建“age_num”列。

在 R 中如何做到这一点?我很难尝试使用stringrlubridate但也许这就是要走的路?

Hen*_*rik 3

使用lubridate便利功能,period并且time_length

library(lubridate)
age %>% 
  mutate(age_years = time_length(period(complete_age), unit = "years"))

  # A tibble: 4 x 2
  #  complete_age              age_years
  # <chr>                         <dbl>
  # 1 10 years 8 months 23 days 10.729637
  # 2  9 years 11 months 7 days  9.935832
  # 3   11 years 3 months 1 day 11.252738
  # 4  8 years 6 months 12 days  8.532854
Run Code Online (Sandbox Code Playgroud)