мутировать столбец на основе условий, сохраняя исходное содержимое - PullRequest
0 голосов
/ 03 октября 2018

Как мне установить условный видоизменение для столбца, но сохранить исходное содержимое.

Например, рассмотрим:

DF=data.frame(A=1:10, B=c("fail1", "fail2", rep(NA,8)))

DF=DF %>% mutate(B = ifelse(A<4,paste(B, "less than 4"),B))

Я хочу создать следующее:

DF_want=data.frame(A=1:10, B=c("fail1 less than 4", "fail2 less than 4", "less than 4", rep(NA,7)))

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

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Другая возможность:

DF %>%
  mutate(B = ifelse(A < 4 & !is.na(B), paste(B, "less than 4"), 
                    ifelse(A < 4 & is.na(B), paste("less than 4"), B))) 

    A                 B
1   1 fail1 less than 4
2   2 fail2 less than 4
3   3       less than 4
4   4              <NA>
5   5              <NA>
6   6              <NA>
7   7              <NA>
8   8              <NA>
9   9              <NA>
10 10              <NA>
0 голосов
/ 03 октября 2018

Единственное различие, которое я вижу между ожидаемым и фактическим выходом, состоит в том, что третья запись в B, что составляет NA less than 4, а не less than 4.Это из-за того, как работает paste();рассмотрим следующее:

paste(NA, "a")
# [1] "NA a"

Итак, вместо этого сделайте следующее:

DF %>% mutate(B = sub("NA", "", ifelse(A < 4,paste(B, "less than 4"), B)))

    A                 B
1   1 fail1 less than 4
2   2 fail2 less than 4
3   3       less than 4
4   4              <NA>
5   5              <NA>
6   6              <NA>
7   7              <NA>
8   8              <NA>
9   9              <NA>
10 10              <NA>
...