R:如果语句功能适用

时间:2015-05-25 17:16:34

标签: r

我有以下数据框:

ID  Value
1    0
2   100
3   200
4    0

如果“Value”列中的值等于0,我想写一个产生“Hi”的函数,否则“Bye”。结果应该是:

Answer
Hi
Bye
Bye
Hi

这是我尝试过的代码:

Type <- function(df){
  if(df$Value == 0)
    "Hi"
  else
    "Bye"
}

apply(X = df, MARGIN = 1, FUN = Type)

然而,我收到此错误:

Error in Test_Customer$Pipe : $ operator is invalid for atomic vectors

有人可以帮我修复此错误吗?谢谢!

2 个答案:

答案 0 :(得分:2)

apply()旨在与矩阵一起使用,而不是data.frames。它实际上将您的data.frame转换为矩阵。因此,当它运行时,它作为简单的原子向量传递行或列。它不是data.frames的子集。您不能将$与原子向量一起使用,因此您的错误消息。

您的例子并不需要apply()。一个简单的ifelse()可以使用

ifelse(df$Value==0, "Hi,"Bye")

ifelse()函数被向量化,它一次可以处理一列数据。 (if语句未向量化。)

答案 1 :(得分:2)

你可以尝试

 c('Bye', 'Hi')[(df1$Value==0)+1L]
 #[1] "Hi"  "Bye" "Bye" "Hi" 

或使用factor

factor(df1$Value!=0, labels=c('Hi', 'Bye'))
#[1] Hi  Bye Bye Hi 
#Levels: Hi Bye