【发布时间】:2018-06-12 10:23:11
【问题描述】:
我想创建一个包含如下 ifelse 语句的函数:
ArrearsL1M<-function(input1, input2, input3, input4){
output=0
output=ifelse((df[[input1]] %in% c(1,2,3,4,5)),1,
ifelse((df[[input2]] %in% c(1,2,3,4,5)),1,
ifelse((df[[input3]] %in% c(1,2,3,4,5)),1,
ifelse((df[[input4]] %in% c(1,2,3,4,5)), 1, 0))))
return(output)
那么我就有这个:
df$Arrears_L1M<-ArrearsL1M("col_201823","col_201822","col_201821","col_201820")
以下是数据示例:
col_201823 col_201822 col_201821 col_201820 col_201819 col_201818 col_201817 col_201816 col_201815
1 99 5 4 2 99 99 99 99 99
2 3 0 3 2 3 3 3 3 3
3 2 2 2 2 2 2 2 2 2
4 0 0 0 1 0 0 0 0 0
5 99 99 5 99 99 99 99 99 99
6 2 1 4 99 2 2 2 2 2
7 1 1 99 99 1 1 1 1 1
因此代码将从最近的开始检查前 4 周的数据(即 2018 年第 23 周、第 22 周、第 21 周和第 20 周)
开始的一周可以改变,我想让这个工作,以便我进入第一周并运行过去 4 周的功能。 我只想输入第一周,所以只有一个输入。因此,如果我输入 col_201820,我将得到 col_201820、col_201819、col_201818 和 col_201817 周的答案。
我想在某个时间点运行 52 周的数据(即一年),因此如果起始周发生变化,我会尝试使其更容易更改。 如果起始周是201801,也需要转到201752、201751、201750。
我不知道从哪里开始,所以无法向您展示我已经尝试过的任何东西。
** 可重现示例的代码
col_201823<-c(99,3,2,0,99,2,1)
col_201822<-c(5,0,2,0,99,1,1)
col_201821<-c(4,3,2,0,5,4,99)
col_201820<-c(2,2,2,1,99,99,99)
col_201819<-c(99,3,2,0,99,2,1)
col_201818<-c(99,3,2,0,99,2,1)
col_201817<-c(99,3,2,0,99,2,1)
col_201816<-c(99,3,2,0,99,2,1)
col_201815<-c(99,3,2,0,99,2,1)
test<-as.data.frame(cbind(col_201823,col_201822,col_201821,col_201820,col_201819,col_201818,col_201817,col_201816,col_201815))
【问题讨论】:
-
什么不能使用“case_when”功能?
-
@Franky 你是什么意思?您建议在哪里使用 case_when?
-
你应该学习
help("|")。 -
另外,您应该将数据重新整形为长格式。如果您需要更多帮助,请提供可重现的示例。
-
@Roland 我的经理特别问我不要我们“或”(即“|”)否则我会的。我已经在数据示例中添加了。
标签: r function loops if-statement