У меня есть набор данных примерно так:

data <- tribble(
  ~id,                 ~value,
   '311321 333 333',     20,
   '18 939 4244',         0,
   '999 3838 4242',       1,
  )

Теперь я хочу получить только первый элемент в столбце id , а затем вернуть для переменной значение значение 1, если оно больше 0. Вот желаемые данные:

desired_data <- tribble(
  ~new_id,  ~value,  ~new_value,
  '311321',  20,         1,
  '18',       0,         0,
  '999',      1,         1,  
)

Есть идеи, как это сделать?

2
datazang 15 Сен 2020 в 21:40

1 ответ

Лучший ответ

Более простой вариант - удалить подстроку из пространства и далее

library(dplyr)
library(stringr)
data %>% 
    mutate(id = str_remove(id, "\\s+.*"), new_value = as.integer(value > 0))

Или другой вариант - использовать parse_number, который извлекает первое число

data %>%
  mutate(id = readr::parse_number(id), new_value = +(value > 0) )

Или с word

data %>%
  mutate(id = word(id, 1), new_value = ifelse(value > 0, 1, 0))
# A tibble: 3 x 3
#  id     value new_value
#  <chr>  <dbl>     <dbl>
#1 311321    20         1
#2 18         0         0
#3 999        1         1
3
akrun 15 Сен 2020 в 18:41