关于此论坛上的if语句有几个问题。我尝试了这些建议,但代码每次产生相同的错误。以下是代码应该执行的操作的说明:
我创建了以下代码:
file$Efficiency<-if(file$Duration <= 5) {"Above Par"} else
{if(file$Duration > 5 & file$Duration <= 15) {"Par"} else
{if(file$Duration > 15 & file$Duration <= 30) {"Below Par"} else
{"Unacceptable"}}}
我收到以下警告
Warning message:
In if (file$Duration <= 5) { :
the condition has length > 1 and only the first element will be used
在几篇文章中提到,如果声明采用一个值,并且没有接受这个作为我所看到的解释。如果该陈述为真,那么我想知道else函数的用途是什么。
答案 0 :(得分:2)
这是一个带有两个ifelse
语句的矢量化解决方案:
file <- data.frame(Duration=c(1,2,3,4,3,4,5,6,7))
d <- ifelse (file$Duration > 3, "medium", "short")
d <- ifelse (file$Duration > 6, "long", d)
> d
#[1] "short" "short" "short" "medium" "short" "medium" "medium" "medium" "long"
答案 1 :(得分:1)
file$Efficiency <- cut(file$Duration, breaks=c(-1,5,15,30,200), labels=c("Above Par", "Par", "Below Par", "Unacceptable"))
以下是我的数据的一个小例子:
x <- c(0,1, 4:6, 14:16, 29:31)
y <- cut(x, breaks=c(-1,5,15,30,200), labels=c("Above Par", "Par", "Below Par", "Unacceptable"))
data.frame(x=x, y=y)
答案 2 :(得分:0)
假设您有一个包含名为Duration
的列的数据框 a = data.frame(Duration=c(1,2,3,4,3,4,5,6,7))
定义一个根据持续时间返回效率值的函数:
eff <- function(duration){
if (duration<5) return('bad')
else return('good')}
为数据框
创建一个新列a[, 'Efficiency'] <- sapply(a$Duration, eff)
完成