max(df $ data == v)根据v = c(x,y)中的x,y顺序返回数字(0)

时间:2018-08-07 05:59:03

标签: r

我正在尝试使用以下代码在2个数字(共5个)中选择最大值。

这些是我尝试访问的列的两个级别:

lev_opsins_SC = c("SWS2Aa", "SWS2B")

对每个人重复它们(但是该循环有效)。 对于每个人,我试图告诉R仅访问与lev_opsins_SC相对应的数据,并告诉我哪个是最大值,然后将其存储。

我发现了问题所在,但不知道如何解决:

max(df$Rate[df$Specimen=="L20" & df$Opsins == lev_opsins_SC])
[1] 0.509928

max(df$Rate[df$Specimen=="L26" & df$Opsins == lev_opsins_SC])
[1] -Inf
Warning message:
In max(df$Rate[df$Specimen == "L26" & df$Opsins == lev_opsins_SC]) :
no non-missing arguments to max; returning -Inf

这是两个不同的个体L26和L20的输出。

我发现,如果我像这样改变我的水平顺序:

lev_opsins_SC = c("SWS2B", "SWS2Aa")

我得到L26的最大值和L20的错误消息。

知道为什么会这样吗? 数据保存在.csv文件中,该文件的保存顺序与所有个人完全相同。

完整循环(lev_ind是针对个人的级别):

for (i in lev_ind) {
maximum = max(df$Rate[df$Specimen==i & df$Opsins == lev_opsins_SC])
  for (j in lev_opsins_SC) {
    rate = df$Rate[df$Specimen==i & df$Opsins==j]
    if (rate == maximum) {
      df$Rate[df$Specimen==i & df$Opsins==j] = 1
    } else {
      df$Rate[df$Specimen==i & df$Opsins==j] = (1/(maximum))*rate
    }
  }

 }
return(df)
}

0 个答案:

没有答案