3 回答
TA贡献1828条经验 获得超3个赞
dplyr
(0.6.0
:=
!!
library(dplyr) multipetalN <- function(df, n){ varname <- paste0("petal.", n) df %>% mutate(!!varname := Petal.Width * n) } data(iris) iris1 <- tbl_df(iris) iris2 <- tbl_df(iris) for(i in 2:5) { iris2 <- multipetalN(df=iris2, n=i) }
multipetal
identical(iris1, iris2)#[1] TRUE
TA贡献1883条经验 获得超3个赞
这是另一个版本,可以说更简单一些。
multipetal <- function(df, n) {
varname <- paste("petal", n, sep=".")
df<-mutate_(df, .dots=setNames(paste0("Petal.Width*",n), varname))
df
}
for(i in 2:5) {
iris <- multipetal(df=iris, n=i)
}
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species petal.2 petal.3 petal.4 petal.5
1 5.1 3.5 1.4 0.2 setosa 0.4 0.6 0.8 1
2 4.9 3.0 1.4 0.2 setosa 0.4 0.6 0.8 1
3 4.7 3.2 1.3 0.2 setosa 0.4 0.6 0.8 1
4 4.6 3.1 1.5 0.2 setosa 0.4 0.6 0.8 1
5 5.0 3.6 1.4 0.2 setosa 0.4 0.6 0.8 1
6 5.4 3.9 1.7 0.4 setosa 0.8 1.2 1.6 2
- 3 回答
- 0 关注
- 772 浏览
添加回答
举报