dfrm$dc <- c("dog", "cat", "rabbit")[ findInterval(dfrm$b, c(1, 2.5, 5.5, Inf)) ]
findInterval 方法将比嵌套ifelse
策略快得多,而且我猜测它比循环遍历未嵌套if
语句的函数要快得多。当我们选择低效算法时,我们这些处理更大数据的人确实注意到了差异。
这实际上并没有解决这个请求,但我并不总是认为 R 的新用户会知道最有表现力或最有效的解决问题的方法。“使用 IF”的请求听起来像是在努力转换两个主要宏观统计处理器 SPSS 和 SAS 的典型编码方法。Rif
控制结构通常不是重新编码列的有效方法,因为它的第一个位置的参数只会针对第一个元素进行评估。它本身不处理列,而ifelse
函数会这样做。该cut
函数可能已在此处使用(带有适当的breaks
和labels
参数),尽管它会传递一个factor
-value 而不是字符值。这findInterval
选择方法是因为它能够返回多个级别(单个级别ifelse
不能)。我认为ifelse
在大约 2 或 3 层嵌套之后,chaining 或 nesting 很快就会变得丑陋和混乱。