【问题标题】:ifelse with multiple logic tests of the same variableifelse 对同一变量进行多个逻辑测试
【发布时间】:2013-10-12 00:38:53
【问题描述】:

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

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 的问题,但似乎找不到我可以使用的任何东西。

【问题讨论】:

  • 我想你正在寻找%in%
  • 看看qdap package'sname2sex函数的开发版本。您的问题可能与names2sex(names) 一样简单,产生:[1] F F M F F M M F M M
  • This post 可能有用。
  • @joran,您介意进一步阐述作为答案吗?
  • @TylerRinker,听起来像是一个计划。会检查的,谢谢。

标签: r if-statement


【解决方案1】:

这是一种方法

> 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"

【讨论】:

  • 谢谢,确实有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 2022-01-18
  • 2021-07-07
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多