Ifelse条件语句

时间:2018-08-14 17:08:48

标签: r dataframe replace

我想做的是查看sp列,并将值“ Gaidropsaurus vulgaris”替换为“ Gaidropsaurus macrophtalma”,反之亦然,这取决于depth({{1} }。 >=148 m的所有其他值应保持不变。我认为我需要这样的(可能)嵌套sp语句:

ifelse

我有一个包含3个变量的数据库:年,物种和深度。

ifelse (dfrm$depth >=148, "Gaidropsaurus macrophthalmus", "Gaidropsaurus vulgaris")

问题在于,我尝试过的所有方法并没有单独留下其他物种,而是将其他名称物种更改为数字。我知道我可以对盖龙类进行子集化,使用ifelse更改“ sp”值,然后将其与其余种合并,但是我敢肯定,有一种更好,更快或更有效的方法。

3 个答案:

答案 0 :(得分:2)

  

问题在于,我尝试过的所有方法都没有单独留下其他物种,而是将其他名称物种更改为数字。

由于sp是一个因素,因此我们需要首先将sp更改为以下字符类别,然后才能进行常规的ifelse

dfrm$sp<- as.character(dfrm$sp)

dfrm$sp_new <- ifelse (dfrm$sp=='Gaidropsaurus vulgaris' & dfrm$depth >=148, 
                 "Gaidropsaurus macrophthalmus", dfrm$sp)

答案 1 :(得分:1)

如果我正确理解了您的问题,那么这就是您所需要的:

dfrm$sp <- ifelse(dfrm$depth >= 148,
                  ifelse(dfrm$sp == "Gaidropsaurus vulgaris",
                         "Gaidropsaurus macrophtalma",
                         ifelse(dfrm$sp == "Gaidropsaurus macrophtalma",
                                "Gaidropsaurus vulgaris",
                                dfrm$sp)),
                  dfrm$sp)

它将首先检查深度条件,然后检查“ Gaidropsaurus”物种并交换值,否则保持不变

编辑:您还需要确保变量具有正确的数据类型。因此,在运行上述ifelse之前,请运行以下命令:
dfrm$sp <- as.character(dfrm$sp) dfrm$depth <- as.numeric(as.character(dfrm$depth))

答案 2 :(得分:0)

据我所知,您正在询问如何

  • 用“ Gaidropsaurus”替换“ sp”向量中的每个字符串 macropthalmus”(如果该索引处的“深度”> = 148)。
  • 用“ Gaidropsaurus”替换“ sp”向量中的每个字符串 如果该指标的“深度”小于148,则为“寻常”。

如果是这样,那么创建所需的数据框只需要执行以下两个步骤。

1)与您在问题中所做的一样,分配数据。

year <- c("2000", "2000", "1999", "1999", "2000", "2000", "1998", "1998", "2000",  "1998", "2000", "1998", "1999", "2000", "2000", "1999", "1999", "2000",  "1998", "1998", "1998", "2000", "1998", "1999", "1998", "2000", "1998",  "1999", "1999", "2000", "2000", "1999", "1999")
sp <- c("Merluccius merluccius", "Gaidropsaurus vulgaris", "Gaidropsaurus macrophtalma",  "Merluccius merluccius", "Gaidropsaurus vulgaris", "Gaidropsaurus macrophtalma",  "Gaidropsaurus vulgaris", "Gaidropsaurus macrophtalma", "Gadiculus argenteus",  "Gadiculus argenteus", "Micromesistius poutassou", "Micromesistius poutassou",  "Gaidropsaurus vulgaris", "Gaidropsaurus macrophtalma", "Merluccius merluccius",   "Merluccius merluccius", "Gaidropsaurus vulgaris", "Gaidropsaurus macrophtalma",  "Gaidropsaurus vulgaris", "Gaidropsaurus macrophtalma", "Gadiculus argenteus",  "Gadiculus argenteus", "Micromesistius poutassou", "Micromesistius poutassou",  "Gaidropsaurus vulgaris", "Gaidropsaurus macrophtalma", "Gaidropsaurus vulgaris",  "Gaidropsaurus macrophtalma", "Micromesistius poutassou", "Gaidropsaurus vulgaris",  "Gaidropsaurus macrophtalma", "Gaidropsaurus vulgaris", "Gaidropsaurus macrophtalma")
depth <- c("77", "111", "456", "123", "389", "211", "244", "176", "198", "88",     "118", "96", "117", "256", "193", "379", "201", "144", "193", "137", "188", "256", "193", "379", "201", "345", "100", "139", "222", "345", "675",  "67", "177")

2)然后添加以下两行代码。

sp <- ifelse(depth >= 148,"Gaidropsaurus macrophthalmus", "Gaidropsaurus vulgaris")
dfrm <- data.frame(year,sp,depth)

我假设您希望变量“年”和“深度”成为因素(由于在数据中将这些数字作为字符串分配的方式)。如果是这样,这些变量将在上面创建的数据框中归类为因素。否则,如果希望将这些变量分类为数字,则可以在数据框中将它们“数字化”为数字。