首先,我对R还是很陌生,所以我对这里发生的事情可能不太了解,但是我仍然停留在这段代码上,我需要快速修复它,因此感谢您的参与先发制人。
我正在尝试查找每年每条路线的冰点,基本上这将在CT值超过阈值9时发生。这是因为我正在处理北极数据,因此CT值将开始为高于9,我必须找到它首先从低于阈值到高于9的阈值。在某些地方,这种局部最小值有函数,但我不知道它们是什么。
我尝试制作一个长的管道语句,但是在引用列时遇到了一些麻烦,因此我尝试在管道语句之外进行group_by,但这也不起作用。
编辑:这是一个示例。 我想以1983年东部和1984年东部的1个值(年份)结束。正确的返回值分别是6和18。
Route Year Day_Year CT
East 1983 1 3
East 1983 2 2
East 1983 3 1
East 1983 4 0
East 1983 5 2
East 1983 6 9.5
East 1984 1 3
East 1984 3 2
East 1984 9 1
East 1984 10 0
East 1984 14 2
East 1984 18 9.5
library("dplyr")
data_g <- group_by(Sea_Ice, Route, Year)
#Above 9 Freeze-Up
Above_9_A <-
#group_by(Sea_Ice, Route, Year) %>%
data_g %>%
mutate(row.position = which.min(data_g$CT))%>%
filter(CT > 9, !SA %in% c("New Ice", "Nilas", "Grey Ice", "Open Water")) %>%
slice(which.min(Day_Year)) %>%
mutate(Conc_Threshold = "Above_9")
我目前正在做的事情是找到所有年份所有路由的最小值。
我只是不知道从这里去哪里,谢谢您的帮助。
编辑2:我暂时已删除其他列的过滤器,因为这不是我的问题
答案 0 :(得分:1)
您需要做的是创建一个当前一个数字都小于9并且当前数字大于9时将为TRUE的列。这是您可以执行的操作:
data_g %>% group_by(route, year) %>%
mutate(freezepoint=(cumsum(CT<9)>0 & CT>=9)) %>%
filter(freezepoint)
或者,更直接地:
data_g %>% group_by(route,year) %>% slice(which.max(cumsum(CT<9)>0 & CT>=9))
(注意:这假定data.frame已按天排列)