#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)