根据多个条件为数据框列分配一个值

时间:2019-09-28 18:34:17

标签: r dataframe

我的数据框如下。

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'} 

我怎么能成功

1 个答案:

答案 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 语句的数量,当比较数量更多时,语句的数量会增加。最好使用ifelsecut而不是嵌套的findInterval


ifelseif一起使用,而不是else

then
相关问题