2

假设我有一个名字向量,如下所示:

names <- c("Bernice", "Dianna", "Philip", "Laurie",
           "Rochelle", "Arturo", "Enrique", "Sarah",
           "Darryl", "Arthur")

我想用每个名字的性别创建另一个向量。我就是这样做的:

ifelse(names == "Bernice" | names == "Dianna" | names == "Laurie"
       | names == "Rochelle" | names == "Sarah", "Feminine",
       ifelse(names == "Philip" | names == "Arturo" | names == "Enrique"
              | names == "Darryl" | names == "Arthur", "Masculine", NA))

但是,我敢打赌,对于每个逻辑测试都有一个更好的替代方法|names == ""(我的真实案例仅针对这个变量就有 250 行)。

到目前为止,我已经尝试过这个(这适用于grep,但显然不是在这里):

ifelse(names == "Bernice|Dianna|Laurie|Rochelle|Sarah", "Feminine",
       ifelse(names == "Philip|Arturo|Enrique|Darryl|Arthur", "Masculine", NA))

还有这个:

ifelse(names == "Bernice" | "Dianna" | "Laurie" | "Rochelle" | "Sarah",
       "Feminine",
       ifelse(names == "Philip" | "Arturo" | "Enrique" | "Darryl" | "Arthur", 
              "Masculine", NA))

但似乎没有一个工作。

我在处理数据帧时经常遇到这个问题(必须使用ifelse同一个变量的多个逻辑测试),并且我已经检查了一些关于多个 ifelse 的 SO 问题,但似乎找不到任何我可以使用的东西。

4

1 回答 1

4

这是一种方法

> girls <- c("Bernice", "Diana", "Laurie", "Rochelle", "Sarah")
> ifelse(names %in% girls, "Feminine", "Masculine")
 [1] "Feminine"  "Masculine" "Masculine" "Feminine"  "Feminine"  "Masculine" "Masculine"
 [8] "Feminine"  "Masculine" "Masculine"
于 2013-10-11T16:35:31.643 回答