簡體   English   中英

R和dplyr,使用group_by在每個組中運行代碼不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM