Это то поведение, которое вы искали?
x <- "bbb"
y <- ""
end <- data.frame(a_col = "aaa")
end %>% mutate(x_col = case_when(nchar(x) == 0 ~ "-",
TRUE ~ x),
y_col = case_when(nchar(y) == 0 ~ "-",
TRUE ~ y))
a_col x_col y_col
1 aaa bbb -
Я думаю, что вы хотите использовать ?nchar()
вместо ?length()
, поэтому вам возвращается количество символов в строке вместо числа элементов в векторе.
Ошибка, которую вы получили, состояла в том, что вы пытались вызвать mutate(data = "bbb")
, но mutate
требует, чтобы аргумент data
был data.frame
или, по крайней мере, унаследовал свой класс от data.frame
. Так что он пожаловался, когда вы пытались передать его character
.
Это еще один способ захвата нескольких результатов конвейера в списке, и они выполняют подстановку пустой строки перед привязкой новых столбцов к существующему фрейму данных.
pipe_results <- list()
pipe_results[["x"]] <- x # these names become column names
pipe_results[["y"]] <- y
map_dfc(pipe_results,
~ gsub("^$", "-", .)) %>%
bind_cols(end, .)