2015-06-25 2 views
2

Я пытаюсь использовать dplyr для применения функции к подмножеству столбцов. Однако, в отличие от кода, приведенного ниже, я пытаюсь реализовать это, сохраняя все столбцы в кадре данных. В настоящее время результирующий кадр данных сохраняет только выбранные столбцы. Я могу использовать конструкцию remove-and-cbind, чтобы объединить эти столбцы обратно в исходный фреймворк данных, но мне было интересно, есть ли способ сделать это прямо в dplyr? Я попытался переместить функцию select внутри функции mutate, но пока не смог выполнить эту работу.dplyr на подмножестве столбцов, сохраняя остальную часть data.frame

require(dplyr) 
Replace15=function(x){ifelse(x<1.5,1,x)} 
dg <- iris %>% 
    dplyr::select(starts_with("Petal")) %>% 
    mutate_each(funs(Replace15)) 
dg 

> dg 
Source: local data frame [150 x 2] 

    Petal.Length Petal.Width 
1   1.0   1 
2   1.0   1 
3   1.0   1 
4   1.5   1 
5   1.0   1 
6   1.7   1 
7   1.0   1 
8   1.5   1 
9   1.0   1 
10   1.5   1 
+3

Может быть, просто 'ирис%>% mutate_each (фаны (Replace15), starts_with ("Лепесток"))'? – aosmith

+0

Вы также можете определить свою функцию с точки зрения встроенной функции 'replace'. 'ifelse' может быть медленным, если это вас беспокоит. http://stackoverflow.com/q/16275149/1191259 – Frank

ответ

3
dg <- iris %>% mutate_each(funs(Replace15), matches("^Petal")) 

В качестве альтернативы (как отправленный @aosmith), вы можете использовать starts_with. Посмотрите ?select для других специальных функций, доступных в пределах select, summarise_each и mutate_each.

Смежные вопросы