列的子集上的dplyr,同时保留其余的data.frame

时间:2015-06-25 15:34:09

标签: r dplyr

我正在尝试使用dplyr将函数应用于列的子集。但是,与下面的代码相反,我试图在保留数据框中的所有列的同时实现这一点。目前,生成的数据框仅保留选定的列。我可以使用remove-and-cbind构造将这些列合并回原始数据帧,但我想知道是否有办法在dplyr中直接执行此操作?我试图在mutate函数中移动select函数,但是还没能使它工作。

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

2 个答案:

答案 0 :(得分:3)

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

或者(由@aosmith发布)您可以使用starts_with。有关?selectselectsummarise_each

中可用的其他特殊功能,请查看mutate_each.

答案 1 :(得分:3)

mutate_each is now deprecated,由mutate_ifmutate_at取代。使用这些替换,答案是

dg <- iris %>% mutate_at(vars(starts_with("Petal")), funs(Replace15))