#r #conditional-statements
#r #условные операторы
Вопрос:
У меня есть набор данных, в котором мне нужно изменить значение ноль на единицу и один на ноль в одном столбце, в зависимости от другого столбца.
Например:
structure(list(id = c(2007, 2007, 2007, 2008, 2008, 2008, 2009,
2009, 2009, 2010, 2010), var = c(0, 1, 0, 0, 1, 1, 1, 0, 1, 0,
0)), class = "data.frame", row.names = c(NA, -11L))
Внесение изменений только для 2008 и 2010 годов:
structure(list(id = c(2007, 2007, 2007, 2008, 2008, 2008, 2009,
2009, 2009, 2010, 2010), var = c(0, 1, 0, 1, 0, 0, 1, 0, 1, 1,
1)), row.names = c(NA, -11L), class = "data.frame")
Любая помощь будет приветствоваться. Спасибо.
Ответ №1:
Если x
является двоичным (1s и 0s), то 1 - x
переключает 1s и 0s. Поэтому мы используем 1 - x
для строк, которые вы хотите изменить:
rows = df$id %in% c(2008, 2010)
df$var[rows] = 1 - df$var[rows]
df
# id var
# 1 2007 0
# 2 2007 1
# 3 2007 0
# 4 2008 1
# 5 2008 0
# 6 2008 0
# 7 2009 1
# 8 2009 0
# 9 2009 1
# 10 2010 1
# 11 2010 1
Комментарии:
1. Отлично @Грегор Томас, очень благодарен.
Ответ №2:
Может быть, немного взломать, но просто возьмите абсолютное значение var
минус 1
a <- structure(list(id = c(2007, 2007, 2007, 2008, 2008, 2008, 2009,
2009, 2009, 2010, 2010), var = c(0, 1, 0, 0, 1, 1, 1, 0, 1, 0,
0)), class = "data.frame", row.names = c(NA, -11L))
a$var <- abs(a$var-1)
Комментарии:
1. Если вы просто хотите изменить определенные строки, вы можете использовать обозначение в скобках
a$var[a$id==2008|a$id==2010] <- abs(a$var[a$id==2008|a$id==2010]-1)