Как добавить текст на основе условного оператора в новый столбец - PullRequest
0 голосов
/ 11 апреля 2019

В RStudio я хочу добавить два новых столбца в фрейм данных. Эти два столбца должны быть заполнены текстом на основе условных операторов из уже существующего столбца в кадре данных.

data.frame

Переменная: число c (1,2,3,4 и т. Д.)

Мне нужен код (оператор), создающий и заполняющий два новых столбца "type_a" и "type_b" на основе числа в столбце "number". Я должен использовать точное число, поэтому "если 1 в" число ", заполните" type_a "с" some_text1 "и заполните" type_b "с" some_text2 ". Следующая строка будет" если 2 или 3 в "number" заполнить «type_a» с «some_text3» и «type_b» с «some_text4».

Это должно быть довольно просто, однако я новичок в R и в настоящее время изучаю курсы.

Спасибо

EDIT:

Благодаря ответам ниже, я теперь смог сделать то, что я хочу с этим кодом. Теперь вопрос в том, могу ли я как-то включить оператор type_b в первый case_when, чтобы мне не приходилось писать список чисел дважды, или можно включить только один столбец для case_when? (в SAS я бы сначала создал два столбца type_a и type_b, а затем написал «if number в (1,2,4,6), а затем выполните: type_a = 'some_text'; type_b = 'some_text2; end;).

Спасибо

ds <- tibble(number = 1:6)

ds %>% 
  mutate(
    type_a = case_when(
      number %in% c(1,2,4,6) ~ "some_text", TRUE ~ NA_character_
    ),
    type_b = case_when(
      number %in% c(1,2,4,6) ~ "some_text2", TRUE ~NA_character_
      )
    )

#The code below do not work, but hopefully you get the idea!

library(tidyverse)
ds <- tibble(number = 1:6)

 ds %>% 
  mutate(
    type_a, type_b = case_when(
      number %in% c(1,2,4,6) ~ "some_text", ~ "some_text2", 
TRUE ~ NA_character_))

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Если вы только начинаете с R, я бы порекомендовал изучить "R для науки о данных" (https://r4ds.had.co.nz/) от Hadley Wickham. Отличный ресурс.

Вот решение того, что я думаю, вы пытаетесь сделать:

library(tidyverse)
ds <- tibble(number = 1:5)

ds %>% 
mutate(
  type_a = case_when(
    number == 1 ~ "some_text1",
    number == 2 | number == 3 ~ "some_text3",
    TRUE ~ NA_character_
  ), 
  type_b = case_when(
    number == 1 ~ "some_text2",
    number == 2 | number == 3 ~ "some_text4",
    TRUE ~ NA_character_
  )
)
0 голосов
/ 11 апреля 2019

Вы можете создать фрейм данных с вашими ключами для замены и использовать функцию merge:

n <- 4
df <- data.frame(number = sample(1:n, 10, replace = TRUE))
df
>   number
1       2
2       2
3       1
4       4
5       4
6       1
7       4
8       3
9       1
10      3


df_text <- data.frame(number = 1:n, text_a = paste0("text", 1:n), text_b = paste0("text", 1:n+n))
df_text
>  number text_a text_b
1      1  text1  text5
2      2  text2  text6
3      3  text3  text7
4      4  text4  text8

merge(df, df_text)
>   number text_a text_b
1       1  text1  text5
2       1  text1  text5
3       1  text1  text5
4       2  text2  text6
5       2  text2  text6
6       3  text3  text7
7       3  text3  text7
8       4  text4  text8
9       4  text4  text8
10      4  text4  text8

Вы можете использовать sort = FALSE в merge, если заказ имеет значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...