【问题标题】:Finding maximum value per row and normalizing to this value查找每行的最大值并标准化为该值
【发布时间】:2018-01-28 14:53:36
【问题描述】:

有没有办法根据每行的最大值对数据帧的多行进行归一化,最好是在 dplyr 中?

Iniris 我想找到 Sepal.length、Sepal.width、Petal.length 和 Petal.width 列每行的最大值。然后我想将每个值除以这个最大值,得到一个从 0 到 1 的范围。我希望能够给出一个列范围,在这些列中找到最大值,最好不必按名称调用它们。

输出目标:

> iris
Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
5.1          3.5         1.4          0.2            setosa

> iris.normalized
Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            3.5/5.1     1.4/5.1      0.2/5.1        setosa

我尝试使用max 函数无济于事。我很高兴有任何帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    使用base R,用pmax计算每行的最大值,然后除以感兴趣的列进行缩放

    iris[1:4] <-  iris[1:4]/do.call(pmax, iris[1:4])
    

    【讨论】:

    • 谢谢,确实有效。我不知道如何将它通过管道传输到 dplyr 块中,但这现在不那么重要了。
    • @Joram 你可以试试iris %&gt;% select_if(is.numeric) %&gt;% do.call(pmax, .) %&gt;% as_tibble %&gt;% map2_df(iris[1:4], ., '/') %&gt;% bind_cols(., iris[setdiff(names(iris), names(.))])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2013-01-23
    • 2020-10-14
    • 1970-01-01
    • 2015-10-01
    • 2013-06-14
    相关资源
    最近更新 更多