选择“跨列最大值”,并在R和/或ggplot中标识列原点

选择“跨列最大值”,并在R和/或ggplot中标识列原点,r,ggplot2,R,Ggplot2,我在一个数据框中有几个数字列,我想执行以下操作: 在所有列中选择最大值,并返回具有最大值的列。这很容易 硬部分:使用不同的颜色段绘制返回的列,以标识该部分来自哪个列。例如,红色段表示这些值来自第1列,蓝色段表示来自第2列 一个简单的例子: Olddata <- data.frame(X1=1:10,X2=5.5) Olddata 现在还不清楚你想要的是什么样的情节。以下是一些要点的开始 下面是另一个关于ggplot的猜测,这种方法不会像max.column前后交替那样好(尽管为组美学添加

我在一个数据框中有几个数字列,我想执行以下操作:

  • 在所有列中选择最大值,并返回具有最大值的列。这很容易

  • 硬部分:使用不同的颜色段绘制返回的列,以标识该部分来自哪个列。例如,红色段表示这些值来自第1列,蓝色段表示来自第2列

  • 一个简单的例子:

    Olddata <- data.frame(X1=1:10,X2=5.5)
    
    Olddata
    现在还不清楚你想要的是什么样的情节。以下是一些要点的开始

    下面是另一个关于
    ggplot
    的猜测,这种方法不会像max.column前后交替那样好(尽管为组美学添加一点
    rle
    逻辑会解决这个问题)

    需要您思考的一些问题:

    • 如果连接所有点,希望线段以什么颜色连接5.5到6
    • 如果您没有连接所有点,您希望如何处理点本身,例如如果
      max.column
      转到1,1,2,1,1,那么如何处理2
    • 我假设你只想要x轴上的行号,对吗

    我认为,将这个问题的范围放在数据提取上是最有意义的如果您在绘制所需的绘图时遇到困难,您应该在新问题中更完整地指定它。您可以链接回此问题,使用相同或稍微修改的样本数据,并使用我的答案中的方法获取绘图数据。

    请参阅
    which.max
    。这和第1部分一样简单。或者可能是
    max.col
    ,尽管它是针对数值矩阵的。如果您希望测试答案中包含代码,请添加一个示例(显示您已经可以执行的操作)。谢谢。我看到max.col标识了max值来自的列,但是我如何才能将新列ColNew=max(Column1,Column2,…ColumnN)绘制为一条具有不同颜色段的线?您回答了,这些绘图正是我需要的。我现在相信我真的不需要一条线,只要读者知道这些点来自哪一列(可能使用图例),具有不同颜色的点是非常好的。谢谢
    Newdata <- data.frame(ColNew=c(rep(5.5,5),6,7,8,9,10)).
    
    # since it's all numeric, let's make it a matrix
    # matrices are easier to apply functions by row
    old = as.matrix(Olddata)
    newdata = data.frame(max.value  = apply(old, MARGIN = 1, FUN = max),
                         max.column = apply(old, MARGIN = 1, FUN = which.max))
    # alternatively, you could do max.column = max.col(old)
    newdata
    
    > newdata
       max.value max.column
    1        5.5          2
    2        5.5          2
    3        5.5          2
    4        5.5          2
    5        5.5          2
    6        6.0          1
    7        7.0          1
    8        8.0          1
    9        9.0          1
    10      10.0          1
    
    with(newdata, plot(max.value, col = max.column))
    
    library(ggplot2)
    ggplot(newdata, aes(x = 1:nrow(newdata), y = max.value,
           group = max.column, color = factor(max.column))) +
        geom_line() +
        theme_bw()