我有一个非常简单的问题,目前正在努力解决。如果我有一个示例数据框:
a <- c(1:5)
b <- c(1,3,5,9,11)
df1 <- data.frame(a,b)
如何创建一个新列(“c”),然后使用 b 列上的 if 语句填充该列。例如:
'cat' 表示 b 中的值为 1 或 2
'dog' 表示 b 中介于 3 和 5 之间的值
'rabbit' 表示 b 中大于 6 的值
因此,使用数据帧 df1 的“c”列将显示为:cat、dog、dog、rabbit、rabbit。
提前谢谢了。
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
and labels
参数),尽管它会提供一个factor
-value 而不是字符值。这findInterval
选择这种方法是因为它能够返回多个级别(其中一个ifelse
不能)。我认为是链接或嵌套ifelse
在大约 2 或 3 层嵌套之后,它很快就会变得丑陋和混乱。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)