我的数据框如下。
price <- c(287655, 456355, 662500, 597864,876545)
House <- data.frame(price)
我需要基于多个条件为此数据集创建另一列。假设数据框的新列为A。
我需要为新列分配一个考虑了多个条件的值。
我尝试了几种方法。但是没有一个成功。
if(House$price < 300000) then {House$A='red'}
if(House$price > 300000 & House$price < 500000) then {House$A='blue'}
if(House$price > 500000) then {House$A='green'}
我怎么能成功
答案 0 :(得分:1)
我们可以使用cut
transform(House, newcol = cut(price, breaks = c(-Inf, 300000, 500000, Inf),
labels = c("red", "blue", "green")))
# price newcol
#1 287655 red
#2 456355 blue
#3 662500 green
#4 597864 green
#5 876545 green
请注意,if/else
没有向量化,它期望输入的length
为1。如果我们这样做是在循环中,每个元素的length
为1,则可以正常工作,但它效率低下,因为ifelse
的{{1}}矢量化版本
if/else
如果我们看一下结果,它们两个都得到相同的输出,但是不同之处在于House <- transform(House, newcol = ifelse(price < 300000, "red",
ifelse(price > 300000 & price < 500000, "blue", "green")))
House
# price newcol
#1 287655 red
#2 456355 blue
#3 662500 green
#4 597864 green
#5 876545 green
语句的数量,当比较数量更多时,语句的数量会增加。最好使用ifelse
或cut
而不是嵌套的findInterval
ifelse
与if
一起使用,而不是else
then