【问题标题】:R: If statement function with applyR:带有应用的 if 语句函数
【发布时间】:2015-05-26 01:21:27
【问题描述】:

我有以下数据框:

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-函数不适用于向量。

标签: r


【解决方案1】:

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

您的示例不需要apply()。一个简单的ifelse() 就可以了

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

ifelse() 函数经过矢量化处理,一次只能处理一列数据。 (if 语句未向量化)。

【讨论】:

    【解决方案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
    

    【讨论】:

    • 可爱的第一个解决方案。 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 2019-10-24
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多