У меня есть фрейм данных с одним столбцом df$condition. Он содержит строки символов, такие как «солнечный», «солнечный свет», «темный», «ночь» и т. Д., По 1 в каждой строке. Теперь я хочу закодировать их во втором столбце df$code. Если значение в df $ condition в строке содержит «солнце», в df$code должно быть 1, если оно содержит «темный» или «ночь», должно быть 2. Иначе, если есть что-то другое или ничего, должно быть 99.

r
0
Henrik 15 Окт 2021 в 18:22

3 ответа

Лучший ответ

Поскольку у вас более одного условия, выражение 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
0
user438383 15 Окт 2021 в 15:36

Вы можете сделать это с помощью вложенного оператора ifelse:

df$code <- with(df, ifelse(grepl("sun", condition), 1, ifelse(grepl("dark|night", condition), 2, 99)))
0
LMc 15 Окт 2021 в 15:38

Использование 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
0
cgvoller 15 Окт 2021 в 15:39