【问题标题】:conditional arithmetic operation error message条件算术运算错误信息
【发布时间】:2018-11-26 05:02:59
【问题描述】:

在我的数据框中,我想通过将DiscVar 变量乘以一个数字(1400(1400-342)(1400+500))来计算产品(帽子、鞋子或雨伞)的成本取决于产品。

计算只针对第一个操作的问题,即dfq$DiscVar * 1400,我不知道为什么。

感谢您的帮助!!

# Data & arithmetic operation  
dfq <- data.frame(ObjVar=c("hat","hat","shoe","shoe","umbrella"),DiscVar=c(0.19,0.39,0.18,1.00,0.64))
dfq$CostVar[dfq$ObjVar == "hat"] <- dfq$DiscVar * 1400
dfq$CostVar[dfq$ObjVar == "shoe"] <- dfq$DiscVar * (1400-342)
dfq$CostVar[dfq$ObjVar == "umbrella"] <- dfq$DiscVar * (1400+500)

【问题讨论】:

    标签: r arithmetic-expressions


    【解决方案1】:

    您对结果进行子集化,但忘记对操作数进行子集化。

    dfq <- data.frame(ObjVar=c("hat","hat","shoe","shoe","umbrella"),DiscVar=c(0.19,0.39,0.18,1.00,0.64))
    
    dfq$CostVar <- 0    # First, create the entire new column
    dfq$CostVar[dfq$ObjVar == "hat"] <- dfq$DiscVar[dfq$ObjVar == "hat"] * 1400
    dfq$CostVar[dfq$ObjVar == "shoe"] <- dfq$DiscVar[dfq$ObjVar == "shoe"] * (1400-342)
    dfq$CostVar[dfq$ObjVar == "umbrella"] <- dfq$DiscVar[dfq$ObjVar == "umbrella"] * (1400+500)
    

    【讨论】:

      【解决方案2】:

      如果有很多独特的元素,我们可以创建一个命名为vector来匹配'ObjVar'中的元素,然后进行算术运算

      nm1 <- setNames(c(1400, 1400-342, 1400 + 500), c('hat', 'shoe', 'umbrella'))
      dfq$CostVar <- with(dfq, nm1[ObjVar] * DiscVar)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 2021-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多