在R语言中查找对应total_cover半最大值的julian日期
解决R中数据框列表找半最大值对应julian日期的问题
你的原代码核心错误是混淆了最大值的位置索引和最大值本身:
which.max(x[["total_cover"]])返回的是total_cover列最大值所在的行号(比如df1中是7,对应第7行的188),而非最大值188本身。- 用这个行号除以2得到3.5,再判断
total_cover >= 3.5会导致所有行都满足条件,which.max自然返回第一行的索引,对应julian=81,这就是错误输出的根源。
正确代码实现
我们需要先计算total_cover的最大值并取其一半作为阈值,再找到第一个满足total_cover >= 阈值的julian值:
unlist(lapply(data.list, function(x) { # 计算total_cover的半最大值阈值 half_max <- max(x$total_cover) / 2 # 找到第一个满足条件的julian日期 x$julian[which.max(x$total_cover >= half_max)] }))
输出结果
运行上述代码后,将得到你期望的输出:
df1 df2 df3 101 97 111
代码解释
max(x$total_cover) / 2:正确计算total_cover最大值的一半,作为判断阈值。x$total_cover >= half_max:生成逻辑向量,标记哪些行的total_cover达到或超过半最大值。which.max(...):返回逻辑向量中第一个TRUE的位置索引(which.max对逻辑向量会直接返回第一个真值的位置)。x$julian[索引]:提取对应位置的julian日期。
内容的提问来源于stack exchange,提问作者millie0725
相关产品推荐
相关产品推荐

