R-如果满足另一列中的条件,则更改一列中的值

时间:2018-07-04 14:15:24

标签: r

我有一个如下的矩阵:

Area_Code <- as.character(c("Red","Yellow","Orange","Orange","Orange"))
Garden_Size <- as.numeric(c(75,100,50,170,105))
Property_Type <- as.character(c("House","Flat","Bungalow","House","House"))
House_Price <- as.numeric(c(110000,120000,355000,495000,150000))
Matrix <- cbind(Area_Code,Garden_Size,Property_Type,House_Price)

我希望能够设置变量,例如; Area_Code必须为橙色 花园大小必须> 100 财产类型必须为“房屋”

然后我想将House_Price变量增加一些数量-在本示例中,假设每行满足这些特定条件,则为10%。

我希望将结果更改另存为新矩阵,以便获得旧矩阵和新更新矩阵的副本。

因此,对于这个特定示例,我希望代码产生的结果是,新矩阵与旧矩阵相同,除了底部的两行(与上面设置的参数匹配)的价格上涨了10%。 / p>

提前感谢您的回答!

1 个答案:

答案 0 :(得分:2)

您的变量是各种类,因此数据框比矩阵更有意义。

Area_Code <- c("Red","Yellow","Orange","Orange","Orange")
Garden_Size <- c(75,100,50,170,105)
Property_Type <- c("House","Flat","Bungalow","House","House")
House_Price <- c(110000,120000,355000,495000,150000)
df <- data.frame(Area_Code, Garden_Size, Property_Type, House_Price)

在这里,使用dplyr检查条件,并在满足条件的情况下将房价提高10%。否则,没有任何变化。

df2 <- df %>% 
  mutate(House_Price = ifelse(Property_Type == "House" &
                              Area_Code == "Orange" &
                              Garden_Size > 100, 
                              House_Price * 1.1, 
                              House_Price))

最后,在dfdf2之间进行比较。

df

#   Area_Code Garden_Size Property_Type House_Price
# 1       Red          75         House      110000
# 2    Yellow         100          Flat      120000
# 3    Orange          50      Bungalow      355000
# 4    Orange         170         House      495000
# 5    Orange         105         House      150000

df2

#   Area_Code Garden_Size Property_Type House_Price
# 1       Red          75         House      110000
# 2    Yellow         100          Flat      120000
# 3    Orange          50      Bungalow      355000
# 4    Orange         170         House      544500
# 5    Orange         105         House      165000