Заменить определенные значения в столбце во фрейме данных - PullRequest
0 голосов
/ 24 января 2019

Я действительно извиняюсь за такой основной вопрос, и я потратил 20 минут, пытаясь выяснить это.Пример:

x <- sample(c("1","2"), 100, replace = TRUE)
y <- sample(c("3","4"), 100, replace = TRUE)
xy <- cbind(x,y)

Теперь я хочу заменить все "2" на "0" в столбце x.На моих реальных данных мне нужно перекодировать всех женщин, закодированных как "2", как "0".

Я пробовал:

xy$x[,xy$x == 2] <- 0

xy[xy$x== 2] <- 0

women <- xy$x== 2
xy[women,] <- 0

Ни одна из этих работ.Первые два дают ошибку, последний заменяет весь ряд нулями.Я много искал на этом сайте, но должно быть очень простое решение (не то чтобы трудное все равно работало).

РЕДАКТИРОВАТЬ:

Мои извинения за использование образца не совпадает с моей реальной проблемой.Как мне сделать это с этим образцом?

x <- sample(c("1","2"), 100, replace = TRUE)
y <- sample(c("3","4"), 100, replace = TRUE)
xy <- cbind(x,y)

Спасибо!

1 Ответ

0 голосов
/ 24 января 2019

Есть несколько проблем:

  • xy - матрица, но код использует $ для фреймов данных.

  • , еслиxy были фреймом данных, тогда xy$x является одномерным, но код в вопросе пытается проиндексировать его с 2 измерениями

  • код в вопросе с использованием womenпри попытке задать для всей строки значение 0

  • , чтобы сделать воспроизводимый пример, вопрос должен включать set.seed, чтобы при каждом вызове использовались одни и те же случайные числа

Этот вариант кода в вопросе работает.Обратите внимание, что важно использовать stringsAsFactors=FALSE, так как в противном случае столбец x будет factor, а 0 не является уровнем этого фактора.

xy <- as.data.frame(xy, stringsAsFactors = FALSE)
xy$x[xy$x == 2] <- 0

Для кода, в котором women предполагаетсяопять же, что xy является фреймом данных:

women <- xy$x== 2
xy[women, "x"] <- 0

Если xy является матрицей, как в вопросе, то это работает:

xy[xy[, "x"] == 2, "x"] <- 0

Это работает, если xyматрица или фрейм данных и возвращает data.frame:

transform(xy, x = replace(x, x == 2, 0))

или

transform(xy, x = ifelse(x == 2, 0, x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...