Заменить значения оператором подсчета [ - PullRequest
1 голос
/ 17 января 2020

У меня есть следующие данные:

set.seed(1)

df_1 <- data.frame(x = replicate(n = 2, expr = sample(x = 1:3, size = 20, replace = T)), 
               y = as.factor(sample(x = 1:5, size = 20, replace = TRUE)))

Я хочу заменить числа >=2 на 9 в x.1 и x.2 одновременно:

df_1[df_1$x.1, df_1$x.2 >= 2] <- 9

Ошибка в [<-.data.frame (*tmp*, df_1 $ x.1, df_1 $ x.2> = 2, значение = 9): дубликаты индексов для столбцов

И заменить число 3 по 99 в y.

df_1$y[df_1$y %in% c('3')] <- 99

Предупреждающее сообщение: в [<-.factor (*tmp*, df_1 $ y% в% c ("3"), значение = c (2L, 5L, 2L,: недопустимый уровень фактора, сгенерированный NA

Tks.

1 Ответ

3 голосов
/ 17 января 2020

Мы можем использовать replace

df_1[1:2] <- replace(df_1[1:2], df_1[1:2] >=2, 9)

Или другой вариант - создать логическую матрицу на подмножестве 'x.' столбцы, извлеките значения и присвойте ему 9

df_1[1:2][df_1[1:2] >= 2] <- 9

. Для изменения factor нам нужно либо снова вызвать factor, либо заранее добавить levels

levels(df_1$y) <- c(levels(df_1$y), "99")
df_1$y
#[1] 4 4 4 2 4 1 1 4 1 2 3 2 2 5 2 1 3 3 4 3
#Levels: 1 2 3 4 5 99

df_1$y[df_1$y == '3'] <- '99'
df_1$y
#[1] 4  4  4  2  4  1  1  4  1  2  99 2  2  5  2  1  99 99 4  99
@#Levels: 1 2 3 4 5 99

Или, как упомянул @thelatemail, если мы отбрасываем levels во время замены

levels(df_1$y)[levels(df_1$y) == '3'] <- "99"

Или можем использовать fct_recode из forcats

library(forcats)
df_1$y <- fct_recode(df_1$y, "99" = "3")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...