2015-09-18 7 views
2

Мне удалось передать аргументы dplyr с использованием .dots в сочетании с переменными _. Однако этот метод, похоже, не работает здесь. Я искал другие подобные вопросы, но я не нашел надежного решения.Передача переменных через dplyr

РАБОЧИЙ ПРИМЕР

library(tidyr) 
library(dplyr) 

mtcars$brand<-row.names(mtcars) 
mtcars_new<-mtcars %>% 
    mutate(brand = strsplit(brand," ")) 

mtcars_new$brand<-sapply(mtcars_new$brand, "[", 1) 

Попытки передать в переменном - Сбой

target<-names(mtcars)[length(mtcars)] 
mtcars_new<-mtcars %>% 
    mutate(target = strsplit(target," ")) 

mtcars_new[length(mtcars)]<-sapply(mtcars_new[length(mtcars)], "[", 1) 

Спасибо за ваше время!

+2

Ждите, где вы используете tidyr? –

+0

В функции, которую я использую, следуя результатам мутанта, я использую unsest() для преобразования результатов по строке – Jeff

+1

. Я до сих пор не понимаю, как это важно для вопроса здесь. –

ответ

0

Мы можем использовать interp от library(lazyeval), чтобы передать переменную. Вместо strsplit, которые возвращают list, мы можем использовать sub, чтобы удалить символы подстроки, начинающиеся с первого места до конца строки, удалить столбец «бренд» и изменить имена столбцов на setNames.

library(lazyeval) 
library(dplyr) 
mtcars %>% 
    mutate_(v1=interp(~sub('\\s+.*$', '', v), v=as.name(target))) %>% 
    select_(.dots=setdiff(c(names(mtcars), 'v1'), target)) %>% 
    setNames(., c(head(names(mtcars),-1), target)) 
Смежные вопросы