R: 带有apply的if语句函数

3

I have the following dataframe:

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

有人能帮我修复这个错误吗?谢谢!


学习使用ifelseif函数不适用于向量。 - IRTFM
2个回答

2

apply() 是用于矩阵而非数据框的。它实际上将你的数据框转换为矩阵。因此,当它运行时,它会将行或列作为简单的原子向量传递。它不会对数据框进行子集处理。你不能使用原子向量来使用 $,这就是你出现错误信息的原因。

在你的示例中,你不需要使用 apply()。一个简单的 ifelse() 就可以完成。

ifelse(df$Value==0, "Hi,"Bye")
< p > ifelse()函数是向量化的,因此它可以一次处理一列数据。(if语句不是向量化的)。 < /p >

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接