我创建了这个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_students
与Enrollment_Begin
和Enrollment_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创建