Select 跨列最大值并确定 R 中的列原点 and/or ggplot
Select maximum across columns and identify column origin in R and/or ggplot
我在数据框中有几个数字列,我想执行以下操作:
Select 所有列的最大值和 return 具有最大值的列。这很简单。
困难的部分:绘制具有不同颜色段的 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回到这个问题,使用相同或稍微修改的样本数据,并使用我的答案中的方法获取数据进行绘图。
我在数据框中有几个数字列,我想执行以下操作:
Select 所有列的最大值和 return 具有最大值的列。这很简单。
困难的部分:绘制具有不同颜色段的 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回到这个问题,使用相同或稍微修改的样本数据,并使用我的答案中的方法获取数据进行绘图。