以虹膜数据为例,虹膜有三种类型:setosa,versicolor和virginica。我想分别规范化他们的sepal.length。我知道一个简单而乏味的过程。是否有更简单的方法来实现我的目标? 我的过程:
data(iris)
library(dplyr)
normalize <- function(x){
return((x- mean(x))/(max(x)-min(x)))
}
data1 <- sapply(filter(iris, Species == 'setosa')[1:4], normalize)
data2 <- sapply(filter(iris, Species == 'versicolor')[1:4], normalize)
data3 <- sapply(filter(iris, Species == 'virginica')[1:4], normalize)
Speiec <- rep(c('setosa','versicolor','virginica'), each = 50)
thedata <- rbind(data1, data2,data3)
theirisdata <- data.frame(thedata,Speiec)
最终数据&#34;他们的数据&#34;具有相同的数据结构,但Sepal.length Sepal.width,Petal.length和Petal.width在每个物种组中被标准化。 我需要一种更简洁的方式来解决这个问题。例如,数据帧的行可以被分类为10个或更多个组。对于每个组,每个列都应用了一个函数。
答案 0 :(得分:1)
您可以在dplyr中使用group_by
分别将功能应用于每个组,然后使用mutate_each
data(iris)
library(dplyr)
normalize <- function(x){
return((x- mean(x))/(max(x)-min(x)))
}
my_data <- iris %>% group_by(Species) %>%
mutate_each(funs(normalize))
检查它是否与原始答案相同:
all(my_data == theirisdata)
[1] TRUE