我已经写了一个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)
答案 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))