Как изменить значение ячейки в data.frame - PullRequest
0 голосов
/ 08 мая 2020

Допустим, у меня есть данные ниже data.frame

library(dplyr)
DF = data.frame('A' = 1:4, 'B' = letters[1:4])

Теперь я хочу изменить конкретное c значение -

DF[DF[, 'B'] == 'a', 'A'] <- 9999

Как я могу использовать функцию dplyr::pipe для добиться того же?

Ответы [ 2 ]

1 голос
/ 08 мая 2020

dplyr::mutate() и dplyr::replace() хорошо подходят для этой задачи.

DF %>% 
  mutate(A = replace(A, B == "a", 9999))

mutate() создает переменную A, поэтому после выполнения она перезапишет существующую переменную A, а затем replace() заменит значение в A с 9999 всякий раз, когда B равно «a».

Наконец, вы хотите сохранить результат, поэтому полный код выглядит следующим образом:

DF <- 
 DF %>% 
 mutate(A = replace(A, B == "a", 9999))
0 голосов
/ 08 мая 2020

Вот как вы можете выполнить sh вышеуказанное, используя pipe (%>%):

DF %>%
  mutate_at("A", ~replace(., B == 'a', 9999))

     A B
1 9999 a
2    2 b
3    3 c
4    4 d

Объяснение: вы изменяете "at" переменную с именем "A", так что все функция, которую вы вызываете, изменит его на месте (вместо того, чтобы создавать новую переменную). Вы можете использовать ~ вместо типичного синтаксиса function(x) для вызова анонимной функции, которая автоматически принимает . в качестве аргумента. Где бы вы ни поместили . в функцию, он будет работать с столбцом «A». Вы используете функцию замены в . (столбец A), чтобы заменить значение 9999 везде, где оператор B == 'a' равен TRUE.

...