Создание новых переменных с преобразованием и%>%
Я пытаюсь использовать оператор типа "труба" для создания новой переменной той же длины, что и другие в кадре данных, на основе LETTERS
вектор. Что-то идет не так, и я слишком нов magrittr
диагностировать проблему.
Я могу создать переменную правильно, когда я пытаюсь с некоторыми "традиционными" вложенными функциями:
expand.grid(a=c(1000-500,1000,1000+500),
b=c(15,150)) %>%
mutate(c=paste("foo", LETTERS[seq_along(a)],sep="_"))
## a b c
## 1 500 15 foo_A
## 2 1000 15 foo_B
## 3 1500 15 foo_C
## 4 500 150 foo_D
## 5 1000 150 foo_E
## 6 1500 150 foo_F
Тогда я решил попробовать %>%
от magrittr
а также dplyr
expand.grid(a=c(1000-500,1000,1000+500),
b=c(15,150)) %>%
mutate(c=paste("foo", a %>%
seq_along %>%
LETTERS[.],sep="_"))
## Error: incorrect number of dimensions
Это также не работает, когда я добавляю псевдоним экстракт ([
) функция от magrittr
:
expand.grid(a=c(1000-500,1000,1000+500),
b=c(15,150)) %>%
mutate(c=paste("foo", a %>%
seq_along %>%
extract(LETTERS,.),
sep="_"))
## Error: incorrect number of dimensions
Я попытался отладить трубу с debug_pipe
но безрезультатно. Буду очень признателен за любые идеи!
2 ответа
Решение
Ты можешь, если ты хочешь:
expand.grid(a=1000+c(-500, 0, 500), b=c(15,150)) %>%
mutate(c = a %>% seq_along %>% LETTERS[.] %>% paste0("foo_", .))
Если мы определим вспомогательную функцию Swap
тогда это можно сделать без использования. как это:
library(dplyr)
library(magrittr)
Swap <- function(f) function(x, y, ...) f(y, x, ...)
expand.grid(a=1000+c(-500, 0, 500), b=c(15,150)) %>%
mutate(c = a %>%
seq_along %>%
Swap(extract)(LETTERS) %>%
Swap(paste0)("foo_"))