Select 跨列最大值并确定 R 中的列原点 and/or ggplot

Select maximum across columns and identify column origin in R and/or ggplot

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

  1. Select 所有列的最大值和 return 具有最大值的列。这很简单。

  2. 困难的部分:绘制具有不同颜色段的 returned 列,标识该部分来自哪一列。例如,红色段表示这些值来自第 1 列,蓝色段表示来自第 2 列。

一个最小的例子:

Olddata <- data.frame(X1=1:10,X2=5.5)

return编辑的数据框应该是

Newdata <- data.frame(ColNew=c(rep(5.5,5),6,7,8,9,10)).

我想知道如何将 Newdata 绘制成一条线,第一部分为红色,第二部分为蓝色。此外,如果这可以概括为Olddata <- data.frame(X1,X2,X3,...),那么Newdata将被绘制为一条由多个颜色段组成的线。

谢谢!

# 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))

这是 ggplot 的另一种猜测,如果您的 max.column 来回交替,这种方式将不会像现在这样做得很好(尽管添加了一点 rle 逻辑群体审美会解决这个问题。

library(ggplot2)
ggplot(newdata, aes(x = 1:nrow(newdata), y = max.value,
       group = max.column, color = factor(max.column))) +
    geom_line() +
    theme_bw()

供您思考的几个问题:

  • 如果你连接所有的点,你想要连接5.5到6的线段是什么颜色?
  • 如果你不连接所有的点,你想用点自己做什么,比如如果 max. column 变成 1, 1, 2, 1, 1,那么 2 怎么办?
  • 我假设您只需要 x 轴上的行号,对吗?

我认为将这个特定问题的范围放在数据提取上是最有意义的。 如果你在制作你想要的情节时遇到困难,你应该在一个新问题中更完整地说明它。你可以link回到这个问题,使用相同或稍微修改的样本数据,并使用我的答案中的方法获取数据进行绘图。