Мутировать столбец в отдельный фрейм данных, используя условие
Я хотел бы добавить новые столбцы в другой фрейм данных в конце канала с мутированием с использованием условия. Если длина переменной равна нулю, добавьте тире в столбец, в противном случае добавьте содержимое. Это часть цикла, в которой я связываю результирующие фреймы данных, поэтому во всех списках есть только один элемент, а фреймы данных здесь имеют только одну строку.
Возможно ли с помощью mutate добавить столбец в фрейм данных, отличный от того, который используется в конвейере?
Я попытался решить эту проблему с помощью советов, которые я нашел здесь: объединить мутацию с условными значениями
Пример кода:
x <- "bbb"
y <- ""
end <- data.frame(a_col="aaa")
end <- x %>%
mutate (end, x_col = case_when(length()==0 ~ '-',
length()!=0 ~ .))
end <- y %>%
mutate (end, y_col = case_when(length()==0 ~ '-',
length()!=0 ~ .))
С обоими я получаю это: "Ошибка в UseMethod("mutate_"): нет применимого метода для" mutate_ ", примененного к объекту класса" персонаж ""
Ожидаемый результат для "конечного" фрейма данных:
a_col x_col y_col
1 aaa bbb -
1 ответ
Это то поведение, которое вы искали?
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, .)