【问题标题】:ifelse statement for finding patterns and if true, code a value in another variable用于查找模式的 ifelse 语句,如果为真,则在另一个变量中编码一个值
【发布时间】:2021-10-15 23:39:49
【问题描述】:

我有一个包含一列 df$condition 的数据框。它包含字符串,如“sunny”、“sunshine”、“dark”、“night”等,每行1个。现在我想在第二列df$code 中编写这些代码。如果行中 df$condition 的值包含“sun”,则df$code 中应该有 1,如果它包含“dark”或“night”,则应该有 2。否则,如果有任何不同或什么都没有,应该是 99。

【问题讨论】:

  • 你应该提供一个代码示例!
  • Henrik,这是对网站上其他人的礼貌,让您在提出问题时更加努力:事实上,您是在要求 我们 提供示例数据和预期的输出结构。请提供文字数据(例如,data.frame(...)dput(x) 的输出)和您尝试过的代码。
  • ... 但是有三种直接的方法:(1)使用命名向量(vec <- c("sun"=2,"dark"=7,...) 作为与df$code <- df$condition[vec] 的查找;(2)使用dplyr::case_when,作为一个答案现在建议;(3)创建一个查找dict <- data.frame(condition=c("sun","dark"), code=c(2,7))(每个唯一condition 一行),然后与merge(mydf, dict, by = "condition", all.x = TRUE) 进行合并/加入,以从数据中获取您想要的内容。祝你好运。
  • 好吧对不起,下次我会努力的。我认为对于你们中的大多数人来说,这是一项非常容易的任务..

标签: r


【解决方案1】:

由于您有多个条件,case_when 语句最简单。

library(tidyverse)
data = data.frame(V1 = c("sunny", "sunshine", "dark", "night", "cloud"))

data %>%
    mutate(V2 = case_when(
        grepl("sun", V1) ~ 1,
        grepl("dark|night", V1) ~ 2,
        TRUE ~ 99
        )
    )
        V1 V2
1    sunny  1
2 sunshine  1
3     dark  2
4    night  2
5    cloud 99

【讨论】:

    【解决方案2】:

    您可以使用嵌套的ifelse 语句来做到这一点:

    df$code <- with(df, ifelse(grepl("sun", condition), 1, ifelse(grepl("dark|night", condition), 2, 99)))
    

    【讨论】:

      【解决方案3】:

      使用dplyr

      df <- data.frame(condition=c("sunny","sunshine","dark","night","somethingelse"))
      
      
      df %>%
        mutate(code = if_else(grepl("sun",condition),1,
                              ifelse(condition=="dark"| condition=="night",2,99)))
      

      输出:

            condition code
      1         sunny    1
      2      sunshine    1
      3          dark    2
      4         night    2
      5 somethingelse   99
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 2013-12-26
        • 2021-12-17
        • 1970-01-01
        相关资源
        最近更新 更多