[英]Filter in group_by + mutate not working as in group_by + summarise in dplyr R
[英]R and dplyr, using group_by to run code per group not working
首先,我對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:我現在已經刪除了其他列的過濾器,因為這不是我的問題的一部分
您需要做的是創建一個當前一個數字都小於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已經按天排列)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.