首页 文章

规范化函数应用于具有分组行的所有列

提问于
浏览
1

以虹膜数据为例,虹膜有三种类型: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)

最终数据“itsisdata”具有相同的数据结构,但Sepal.length Sepal.width,Petal.length和Petal.width在每个物种组中归一化 . 我需要一种更简洁的方法来解决这个问题 . 例如,数据帧的行可以被分类为10个或更多个组 . 对于每个组,将一个函数应用于每列 .

1 回答

  • 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
    

相关问题