我在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
以下是我希望看到的可能结果的示例(带有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
总而言之,我有一个包含";Complete_age";列的数据集,我想创建列";age_num.";
如何在R中执行此操作?我在尝试使用stringr
和lubridate
时遇到困难,但也许这是可行的方法?
使用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