R函数放一个标志

时间:2015-12-16 15:41:40

标签: r

我已经写了一个r函数来标记1为男性,2为女性。但代码没有运行我在这里做错了什么。 我的数据帧(dataframe的名称=输入) 姓名性别 Anu F. 汤姆M. 约翰M. 玛丽杰 我想在此介绍一个新列,其中M为1,F为2。 我写了下面的代码

f1 <- function(gender,category) {
  if(gender == "M") {
    category=1
    category
   } else {
     category=2
     category
  } 

 }
 f1(input$gender,input$category)

2 个答案:

答案 0 :(得分:4)

您的功能有几个问题。第一个是你不应该在函数定义中传递一个类别变量。你真的只想传递性别并让它返回1或2,具体取决于input$gender等于什么。其次,如评论中所述,if不喜欢其条件中的参数向量;它只会使用input$gender的第一个元素。第三,您没有将函数的返回值分配给数据集。

要使其工作,您需要重写该函数,一次只能获取一个元素,然后返回一个数字。然后,您可以将此与sapply或类似的内容结合使用。更合适的是使用R已经提供的ifelse函数。它看起来像这样:

dat <- data.frame(name = c("Anu", "Tom", "John", "Mary"), gender = c("F", "M", "M", "F"), stringsAsFactors = F)
dat$category <- ifelse(dat$gender == "M", 1, 2)

请注意,ifelse与您在代码中看到的典型if/else组合不同。此函数旨在获取元素的向量并在其上循环。我强烈建议您阅读?ifelse中的资料。

希望有所帮助!

答案 1 :(得分:-4)

也许使用dplyr

library("dplyr")

input %>%
     mutate(new_sex=ifelse(gender=="M", 1, 2))