【问题标题】:changing the status value to 1 when the diff is <0 in r当 r 中的 diff <0 时将状态值更改为 1
【发布时间】:2017-12-14 11:23:55
【问题描述】:

当 Diff 值

df <- as.data.frame(list(diff=c("4","0","0","0","0","0","0","0","0","0",
                       "0","-30","0","0","0","0","0","0","0","0",
                       "14","0","0","0","0","0","0","-55","0","0",
                       "0","0","0","0","0","0","0","0","0","0",
                       "0","0","0","-40","0","0","0","0","0","0",
                       "0","0","0","0","0","0","0","0","0","0",
                       "0","-30","0","0","0","0","0","0","0","0",
                       "0","0","0","0","0"),
             status=c("0","0","0","0","0","0","0","0","0","0",
                      "0","0","0","0","0","0","0","0","0","0",
                      "0","0","0","0","0","0","0","0","0","0",
                      "0","0","0","0","0","0","0","0","0","0",
                      "0","0","0","0","0","0","0","0","0","0",
                      "0","0","0","0","0","0","0","0","0","0",
                      "0","0","0","0","0","0","0","0","0","0",
                      "0","0","0","0","0")))

【问题讨论】:

    标签: r for-loop dplyr


    【解决方案1】:

    通过为 data.frame 函数提供一组字符值,您创建了一个难题。默认情况下,除非您设置 stringsAsFactors=FALSE,否则将创建因子变量。有两件事是必然的:与 0 的比较将失败,并且分配给 df$status 列中不存在的值同样会失败。

    df <- data.frame(diff=c("4","0","0","0","0","0","0","0","0","0",
                           "0","-30","0","0","0","0","0","0","0","0",
                           "14","0","0","0","0","0","0","-55","0","0",
                           "0","0","0","0","0","0","0","0","0","0",
                           "0","0","0","-40","0","0","0","0","0","0",
                           "0","0","0","0","0","0","0","0","0","0",
                           "0","-30","0","0","0","0","0","0","0","0",
                           "0","0","0","0","0"),
                 status=c("0","0","0","0","0","0","0","0","0","0",
                          "0","0","0","0","0","0","0","0","0","0",
                          "0","0","0","0","0","0","0","0","0","0",
                          "0","0","0","0","0","0","0","0","0","0",
                          "0","0","0","0","0","0","0","0","0","0",
                          "0","0","0","0","0","0","0","0","0","0",
                          "0","0","0","0","0","0","0","0","0","0",
                          "0","0","0","0","0"), stringsAsFactors=FALSE)
    

    一旦这些问题被搁置一旁,您就可以通过以下逻辑索引分配获得成功:

    df$status[as.numeric(df$diff) < 0 ] <- 1
    

    【讨论】:

      【解决方案2】:
      library(dplyr)    
      df <- df %>%
            mutate(status = ifelse(diff < 0, 1, 0))
      

      【讨论】:

      • 你能解释一下这将如何解决问题的代码吗?
      • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请编辑您的答案以添加解释,并说明适用的限制和假设。
      • 感谢 Joseph,这是一个梦想,我必须先删除 NA 的值,以免出现任何错误
      • 我不认为代码真的有效。本来预计 diff 列的因子性质会导致数字比较出现问题......确实如此。
      猜你喜欢
      • 2019-12-14
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2021-09-15
      相关资源
      最近更新 更多