заменить значения в столбце фрейма данных другим значением (одинаковым для всех)

#r #replace

#r #заменить

Вопрос:

Мой фрейм данных состоит из 21 столбца, для этой проблемы актуален только один: я хочу заменить значения 2 или 3 или 4 или 5 в столбце a значением 1 (в том же столбце).

помимо выполнения приведенного ниже кода для любого значения 2,3,4,5, я ищу что-то более элегантное:

   df <- df %>% mutate (a = replace(a, a == 2,1))
  df <- df %>% mutate (a = replace(a, a == 3,1))
  df <- df %>% mutate (a = replace(a, a == 4,1))
  df <- df %>% mutate (a = replace(a, a == 5,1))
  

итак, я просто придерживаюсь условия «или» мне нужно создать внутри кода…
есть решение?

Ответ №1:

Вы можете заменить несколько столбцов с помощью across и несколько значений на %in% . Например, если вы хотите заменить значения из столбца a , b , c и d , вы можете сделать :

 library(dplyr)
df <- df %>% mutate(across(a:d, ~replace(., . %in% 2:5, 1)))
#For dplyr < 1.0.0 use `mutate_at`
#df <- df %>% mutate_at(vars(a:d), ~replace(., . %in% 2:5, 1))
  

В базе R вы можете сделать это с помощью lapply :

 cols <- c('a','b','c','d')
df[cols] <- lapply(df[cols], function(x) replace(x, x %in% 2:5, 1))
  

Комментарии:

1. но если у меня нет хронологического порядка в моих значениях, как я могу это записать? например, 3,6,8,2

2. Вы можете использовать replace(., . %in% c(3,6,8,2), 1)