我有以下数据框:
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
有人可以帮我解决这个错误吗?谢谢!
最佳答案
apply()
旨在用于矩阵,而不是 data.frames。它实际上将您的 data.frame 转换为矩阵。因此,当它运行时,它会将行或列作为简单的原子向量传递。它不会对 data.frames 进行子集化。您不能将 $
与原子向量一起使用,因此会出现错误消息。
您的示例不需要 apply()
。一个简单的 ifelse()
就可以工作
ifelse(df$Value==0, "Hi,"Bye")
ifelse()
函数被向量化为一次处理一列数据。 (if
语句不是矢量化的)。关于R:带有应用的 if 语句函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30443113/