R中If语句的解释

时间:2016-01-21 19:21:20

标签: r if-statement

关于此论坛上的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函数的用途是什么。

3 个答案:

答案 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)

完成