将月份作为r中的数值获取



我创建了这个for循环来遍历学生记录列表(SU_students),并在名为" enrollment _months"的新列中获取注册开始日期和注册结束日期之间的差值。

我正在使用来自lubrication库的interval()函数,当我在两个日期的单个值上在循环外使用它时,它返回数值,这就是我正在寻找的;将月份作为数据框架中列中的数值。

for (row in 1:nrow(SU_students)){
SU_students$enroll_months[row] <- interval(Enrollment_Begin[row], Enrollment_End[row]) %/% months(1)
}

假设您的SU_studentsEnrollment_BeginEnrollment_end长度相同,您可以在data.frame中完成这一切。我发现使用lubridate::time_length()更容易,因为如果我开始改变东西,它感觉更直观,更容易参数化。

这些函数是向量化的,因此不需要for循环遍历元素。

set.seed(42)
df <- data.frame(
SU_students = letters[1:10],
Enrollment_Begin = as.Date("2021-10-04") + runif(10, -1, 1) * 100,
Enrollment_End = as.Date("2021-10-04") + runif(10, -1, 1) * 100
)
df$enroll_months <- lubridate::time_length(lubridate::interval(df$Enrollment_Begin, df$Enrollment_End), "months")
df
#>    SU_students Enrollment_Begin Enrollment_End enroll_months
#> 1            a       2021-12-25     2021-09-25    -3.0133179
#> 2            b       2021-12-30     2021-11-16    -1.4384720
#> 3            c       2021-08-22     2021-12-29     4.2485981
#> 4            d       2021-12-09     2021-08-16    -3.7743148
#> 5            e       2021-11-01     2021-09-26    -1.1630180
#> 6            f       2021-10-07     2021-12-31     2.7478618
#> 7            g       2021-11-20     2022-01-07     1.5912136
#> 8            h       2021-07-22     2021-07-19    -0.1145282
#> 9            i       2021-11-04     2021-09-28    -1.1799681
#> 10           j       2021-11-14     2021-10-16    -0.9337551

由reprex包(v2.0.1)于2018-10-04创建

相关内容

  • 没有找到相关文章

最新更新