如何使用ifelse和paste函数

时间:2016-09-20 11:13:08

标签: r if-statement

我正在学习使用Zuur等人(2009)的初学者指南中的 ifelse 函数。在一个练习中,有一个名为Owls的数据框,其中包含大约27个巢的数据和两个晚上的观察。

Class1: Node and (in_extent_of some Arc and min one Arc is Highway)

Class2: Node and (in_extent_of some Arc and Arc not Highway)

关于喂养方式(饱足或缺乏)的两个晚上不同,并在Foodregime变量中指出。任务是使用 ifelse 过去的函数,这些函数创建一个新的分类变量,用于定义特定巢中单个夜晚的观察结果。

在解决方案中,建议使用以下代码:

structure(list(Nest = structure(c(1L, 1L, 1L, 1L), .Label = "AutavauxTV", class = "factor"), 
    FoodTreatment = structure(c(1L, 2L, 1L, 1L), .Label = c("Deprived", 
    "Satiated"), class = "factor"), SexParent = structure(c(1L, 
    1L, 1L, 1L), .Label = "Male", class = "factor"), ArrivalTime = c(22.25, 
    22.38, 22.53, 22.56), SiblingNegotiation = c(4L, 0L, 2L, 
    2L), BroodSize = c(5L, 5L, 5L, 5L), NegPerChick = c(0.8, 
    0, 0.4, 0.4)), .Names = c("Nest", "FoodTreatment", "SexParent", 
"ArrivalTime", "SiblingNegotiation", "BroodSize", "NegPerChick"
), row.names = c(NA, 4L), class = "data.frame")

显然它创建了一个新变量,其值的结尾各不相同(" -1"或" -2")

Like this

然而,当我调用原始数据帧时,所有" -1" NestNight变量中的结尾消失,并转到" -2。"

LIKE THIS

为什么会这样?作者是否遗漏了代码中的某些内容,或者我没有得到它?

非常感谢

编辑:抱歉,我想通过使用 dput 复制我的数据来提供可重现的示例,但它不起作用。如果你能让我知道如何纠正它以使它看起来正常,我也要感激不尽!

1 个答案:

答案 0 :(得分:2)

<强>解决方案

如果您在ifelse结构之外进行分配,则有效:

Owls$NestNight <- ifelse(Owls$FoodTreatment == "Satiated", 
                         paste(Owls$Nest, "1",sep = ""),
                         paste(Owls$Nest, "2",sep = ""))

<强>解释

如果你要执行以下两行,你的情况会发生什么:

Owls$NestNight <- paste(Owls$Nest, "1",sep = "")
Owls$NestNight <- paste(Owls$Nest, "2",sep = "")

您首先将paste(Owls$Nest, "1",sep = "")分配给Owls$NestNight,然后重新分配paste(Owls$Nest, "2",sep = "")ifelse不受此影响,但您不会将其结果分配给任何变量。 也许更清楚的是你是否测试了这个简单的代码:

c(a <- 1:5, a <- 6:10) #c is your ifelse, a is your Owls$NestNight
a #[1]  6  7  8  9 10