if else的快捷方式

时间:2013-08-23 10:35:30

标签: r if-statement

表达以下决策规则的最短方式是什么

df<-data.frame(a=LETTERS[1:5],b=1:5)
index<-df[,"a"]=="F"
if(any(index)){
  df$new<-"A"
}else{
  df$new<-"B"
}

4 个答案:

答案 0 :(得分:9)

最短是

df$new=c("B","A")[1+any(df$a=="F")]

更优雅的是:

df$new <- if (any(df$a == "F")) "A" else "B"

df <- transform(df, new = if (any(a == "F")) "A" else "B")

ifelse运算符被建议两次,但我会保留它用于不同类型的操作:

df$new <- ifelse(df$a == "F", "A", "B")

会在每一行上放置AB,具体取决于该行中a的值(这不是您的代码当前正在执行的操作。)

答案 1 :(得分:3)

可能使用矢量化版本ifelse

> df$new <- ifelse(any(df[,"a"]=="F"), "A", "B")
> df
  a b new
1 A 1   B
2 B 2   B
3 C 3   B
4 D 4   B
5 E 5   B

答案 2 :(得分:1)

ifelse的另一种解决方案:

df$new <- ifelse("F" %in% df$a,"A","B") 

答案 3 :(得分:0)

从技术上讲,这比上述所有内容都短;)

df$new <- LETTERS(2-any("F"%in%df$a))