我正在学习使用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")
然而,当我调用原始数据帧时,所有" -1" NestNight变量中的结尾消失,并转到" -2。"
为什么会这样?作者是否遗漏了代码中的某些内容,或者我没有得到它?
非常感谢
编辑:抱歉,我想通过使用 dput 复制我的数据来提供可重现的示例,但它不起作用。如果你能让我知道如何纠正它以使它看起来正常,我也要感激不尽!
答案 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