【发布时间】:2014-09-10 17:30:00
【问题描述】:
这是这个问题的后续,虽然这里的问题与那个问题无关,Using apply functions instead of for and branching statements in R
我有一个数据框:
Date Close Weekday DayOfMonth
290 1991-02-22 365.65 Friday 22
295 1991-03-01 370.47 Friday 1
300 1991-03-08 374.95 Friday 8
305 1991-03-15 373.59 Friday 15
310 1991-03-22 367.48 Friday 22
314 1991-03-28 375.22 Thursday 28
319 1991-04-05 375.36 Friday 5
324 1991-04-12 380.40 Friday 12
329 1991-04-19 384.20 Friday 19
334 1991-04-26 379.02 Friday 26
339 1991-05-03 380.80 Friday 3
我想创建另一个名为 WeekOfCycle 的列,它根据月份中的某天计算出给定日期在月份中的哪一周。我正在根据上述问题使用此功能。
as.integer(cut(data$DayOfMonth, c(-Inf, 7, 14, 21, 28, Inf)))
上面的行适合周五,周四应该是
as.integer(cut(data$DayOfMonth, c(-Inf, 6, 13, 20, 27, Inf)))
期望的输出:
Date Close Weekday DayOfMonth WeekOfCycle
290 1991-02-22 365.65 Friday 22 4
295 1991-03-01 370.47 Friday 1 1
300 1991-03-08 374.95 Friday 8 2
305 1991-03-15 373.59 Friday 15 3
310 1991-03-22 367.48 Friday 22 4
314 1991-03-28 375.22 Thursday 28 5
319 1991-04-05 375.36 Friday 5 1
324 1991-04-12 380.40 Friday 12 2
329 1991-04-19 384.20 Friday 19 3
334 1991-04-26 379.02 Friday 26 4
339 1991-05-03 380.80 Friday 3 1
我试图让它与这个 lapply 函数一起工作,尽管它不起作用:
data$WeekOfCycle <- with(data, lapply(Weekday, function(i){
if (i == "Friday"){
as.integer(cut(DayOfMonth, c(-Inf, 7, 14, 21, 28, Inf)))
}
else if (i == "Thursday"){
as.integer(cut(DayOfMonth, c(-Inf, 6, 13, 20, 27, Inf)))
}
}
))
我觉得我很接近,但肯定错过了一些东西。理想情况下,即使没有 if 和 else 语句,我也想这样做,但我不知道该怎么做。
数据框的可重现代码:
structure(list(Date = structure(c(7722, 7729, 7736, 7743, 7750,
7756, 7764, 7771, 7778, 7785, 7792), class = "Date"), Close = c(365.65,
370.47, 374.95, 373.59, 367.48, 375.22, 375.36, 380.4, 384.2,
379.02, 380.8), Weekday = c("Friday", "Friday", "Friday", "Friday",
"Friday", "Thursday", "Friday", "Friday", "Friday", "Friday",
"Friday"), DayOfMonth = c(22, 1, 8, 15, 22, 28, 5, 12, 19, 26,
3)), .Names = c("Date", "Close", "Weekday", "DayOfMonth"), row.names = c(290L,
295L, 300L, 305L, 310L, 314L, 319L, 324L, 329L, 334L, 339L), class = "data.frame")
感谢您的帮助。
【问题讨论】:
标签: r if-statement dataframe