我想知道如何告诉R仅显示每行中的最大值。
例如,我想要这张桌子:
> data<- randu
> data[1:10,]
x y z
1 0.000031 0.000183 0.000824
2 0.044495 0.155732 0.533939
3 0.822440 0.873416 0.838542
4 0.322291 0.648545 0.990648
5 0.393595 0.826873 0.418881
6 0.309097 0.926590 0.777664
7 0.826368 0.308540 0.413932
8 0.729424 0.741526 0.884338
9 0.317649 0.393468 0.501968
10 0.599793 0.846041 0.678107
看起来像这样:
x y z
1 0.000824
2 0.533939
3 0.873416
4 0.990648
5 0.826873
6 0.926590
7 0.826368
8 0.884338
9 0.501968
10 0.846041
答案 0 :(得分:6)
我们可以使用pmax
查找每行的max
值
do.call(pmax, df)
并使用它创建一个逻辑矩阵并将每行中不是max
的那些值替换为NA
df[df != do.call(pmax, df)[row(df)]] <- NA
或者另一个选择是apply
,其中MARGIN
指定为1,以遍历行并使用相同的逻辑
df[] - t(apply(df, 1, FUN = function(x) replace(x, x!= max(x), NA)))
df
# x y z
#1 NA NA 0.000824
#2 NA NA 0.533939
#3 NA 0.873416 NA
#4 NA NA 0.990648
#5 NA 0.826873 NA
#6 NA 0.926590 NA
#7 0.826368 NA NA
#8 NA NA 0.884338
#9 NA NA 0.501968
#10 NA 0.846041 NA