我在写我的第一个有史以来功能(包括任何其他的编程语言),我对正确的结构有点混乱if,else和ifelse.我搜索了大量的例子,但没有一个对我很清楚.
情况 - 我试图通过他们成为客户的时间来吸引客户,然后将其变成一个因素.
#Sample Data
clientID <- round(runif(2,min=2000, max=3000),0)
MonthsSinceSignUp <- round(runif(20,min=1, max=60),0)
df <- data.frame(cbind(clientID,MonthsSinceSignUp))
Run Code Online (Sandbox Code Playgroud)
对于给定的客户,我想确定他们是否已经不到一年,超过一年,但少于2,等等.
这是我在函数中的第一次破解:
ClientAgeRange <- function(MonthsSinceSignUp) {
if (MonthsSinceSignUp < 13) {ClientAgeRange <- '1 year'}
} else {
if (MonthsSinceSignUp > 13 & MonthsSinceSignUps < 25) {ClientAgeRange <- '2 years'}
} else {ClientAgeRage <- '3+ years'}
Run Code Online (Sandbox Code Playgroud)
我一直得到的错误是:
Error: unexpected '}' in "}",这表明我错过了或者有一个额外的结束括号.然而,尽管我的拍摄有问题,但我无法找到它.但是 - 我认为一般来说,我没有将正确的结构应用于该函数.我正在努力制作一个if this, then set this variable as that.如何正确构建此功能?
最后 - 如果我想将函数的输出添加到dataframe,那么这是apply正确的方法吗?
答案分为两部分:
我的第一个提示是使用支架匹配的代码编辑器.例如,Notepad++你得到这个:
PS.我不推荐Notepad++- 使用Rstudio代替 - 我只是Notepad++因为花边(因此容易发现)而使用颜色

请注意,突出显示的大括号(红色)与函数中间的大括号匹配.这表明在你的第一次结束时有多余的支撑if.所以,首先解决这个问题:

好的,现在没有匹配的大括号(没有突出显示的红色),所以你需要在函数末尾添加缺少的大括号:

但是如果你使用的话cut,你可以大大简化你的功能,这是为了进行这种分析:
ClientAgeRange <- function(x) {
cut(x, breaks=c(0, 13, 25, Inf), labels=c("1 year", "2 years", "3+ years"))
}
Run Code Online (Sandbox Code Playgroud)
试试你的代码:
ClientAgeRange(df$MonthsSinceSignUp)
[1] 2 years 1 year 3+ years 2 years 3+ years 3+ years 2 years 2 years 3+ years 3+ years 1 year
[12] 3+ years 2 years 3+ years 3+ years 3+ years 3+ years 3+ years 3+ years 3+ years
Levels: 1 year 2 years 3+ years
Run Code Online (Sandbox Code Playgroud)