在一个包含4列的数据框架中,我正在寻找一种优雅的方法来获取包含第1列中的名称的3个列表,如果该名称所在行的最大值分别位于第2、3或4列中。
第一列包含参数名,
第3列,参数x的log10转换数据的shapiro测试结果
如果这是数据:
Parameter xval xlog10val xcustomval
1 FWS.Range 0.62233371 0.9741614 0.9619065
2 FL.Red.Range 0.48195980 0.9855781 0.9643206
3 FL.Orange.Range 0.43338087 0.9727243 0.8239867
4 FL.Yellow.Range 0.53554943 0.9022795 0.9223407
5 FL.Red.Gradient 0.35194524 0.9905047 0.5718224
6 SWS.Range 0.46932823 0.9487955 0.9825318
7 SWS.Length 0.02927791 0.4565962 0.7309313
8 FWS.Fill.factor 0.93764311 0.8039806 0.0000000
9 FL.Red.Total 0.22437754 0.9655873 0.9923307
问题:如何获取一个列表,告诉我所有参数名称,其中xlog10val是三列(xval、xlog10val、xcuxtomval)中最高的一列
详细的解释,也许忽略。。。。
'FWS.Fill.factor'
因为那是唯一一排
xval
他得分最高
'FWS.Range', 'FL.Red.Range', 'FL.Orange.Range',
'FL.Red.Gradient', 'FWS.Fill.factor'
然后列出其余的3个名字
df$Parameter[which(df$xval == max(df[ ,2:4]))]
但这给了
integer(0)
结果。
澄清:
让我们从第2列(xval)开始。
如果是这种情况,请将该行中的参数添加到xval列表中
然后我们对xlog10val每行执行相同的操作。如果第i行中的xlog10val是2:4列的最大值,则将该行的名称添加到xlog10val_是_3_列的最大值列表中。
要制作DF,请执行以下操作:
df <- data.frame(Parameter = c('FWS.Range', 'FL.Red.Range', 'FL.Orange.Range', 'FL.Yellow.Range', 'FL.Red.Gradient','SWS.Range','SWS.Length','FWS.Fill.factor','FL.Red.Total'),
xval = c(0.622333705577588,0.481959800402278,0.433380866119736,0.535549430820635,0.351945244290616,0.469328232931424,0.0292779051823701,0.93764311477813,0.224377540663707),
xlog10val = c( 0.974161367853916,0.985578135386898,0.97272429360688,0.902279501804112,0.990504657326703,0.94879549470406,0.45659620937997,0.803980592920426,0.965587334461157),
xcustomval = c(0.961906534164457,0.964320569400919,0.823986745004031,0.922340716468745,0.571822393107348,0.982531798077881,0.73093132928955,0,0.992330722386105))