我有大量調查資料需要從中洗掉長度例外值。它看起來像這樣(但不像這樣,海豚不太可能是 52 毫米):
Area Season Species Length (mm)
Christchurch Spring dolphin 52
Christchurch Spring dolphin 54
Christchurch Spring dolphin 46
Christchurch Spring dolphin 40
Christchurch Spring dolphin 38
Christchurch Autumn dolphin 52
Christchurch Autumn dolphin 54
Christchurch Autumn dolphin 46
Christchurch Autumn dolphin 40
Christchurch Autumn dolphin 38
Christchurch Spring ray 52
Christchurch Spring ray 54
Christchurch Spring ray 46
Christchurch Spring ray 40
Christchurch Spring ray 38
Christchurch Autumn ray 52
Christchurch Autumn ray 54
Christchurch Autumn ray 46
Christchurch Autumn ray 40
Christchurch Autumn ray 38
我的問題是我有 6 個區域,每個區域的物種范圍和大約 2000 次測量,我需要洗掉每個季節和位置的每個物種的長度例外值。我對 r 和一般編碼非常陌生,所以任何幫助都可以使這個程序更有效,因為我完全意識到我可能沒有以最簡化的方式進行此操作。
我使用回圈按區域對原始資料進行子集化,給我 6 個新資料幀,然后按季節和物種分別給我大約 30 個資料幀。
我現在已經筋疲力盡,無法弄清楚如何從每個資料幀中洗掉例外值,而不將每個資料幀單獨放入下面的代碼中。
Q<-quantile(au_ray_christ$TOTAL_LENGTH_MM, probs=c(.25,.75),na.rm=FALSE)
iqr<-IQR(au_ray_christ$TOTAL_LENGTH_MM)
au_ray_christ<-subset(au_ray_christ,au_ray_christ$TOTAL_LENGTH_MM >(Q[1]-1.5*iqr) & au_ray_christ$TOTAL_LENGTH_MM < (Q[2] 1.5*iqr))
任何幫助將不勝感激,如果它阻止我不得不復制和粘貼我的生活,我非常樂意回傳幾步!
附言。我最終還需要將資料恢復到一幀中,所以如果我可以避免以任何方式將其全部拆分,那也很棒。
uj5u.com熱心網友回復:
您還可以嘗試 r-packageoutliers與dplyr:
library(outliers)
library(dplyr)
# I assume dat is the dataframe with your raw data
dat %>% filter(Species=="dolphin") %>%
select(Length_mm) %>%
unlist %>%
grubbs.test()
dat %>% filter(Species=="ray") %>%
select(Length_mm) %>%
unlist %>%
grubbs.test()
當使用user2974951的資料框時,實際上有一個例外值,結果是:
對于海豚:(沒有發現例外值!)
Grubbs test for one outlier
data: .
G.Length_mm7 = 1.20000, U = 0.82222, p-value = 1
alternative hypothesis: highest value 54 is an outlier
對于光線(發現例外值!):
Grubbs test for one outlier
data: .
G.Length_mm6 = 2.81052, U = 0.13111, p-value = 0.0001611
alternative hypothesis: highest value 100 is an outlier
然而,這個解決方案并沒有創建一個帶有 TRUE/FALSE 列的漂亮表格......
uj5u.com熱心網友回復:
這是一種按區域、季節和物種識別“例外值”的基本 R 方法(請注意,由于當前資料中沒有“例外值”,所以我又添加了一行具有非常不同的值),而不是如何洗掉它們
do.call(
rbind,
by(
df,
list(df$Area,df$Season,df$Species),
function(x){
Q<-quantile(x$Length_mm,probs=c(.25,.75),na.rm=FALSE)
iqr<-IQR(x$Length_mm)
cbind(
x,
"out"=x$Length_mm<(Q[1]-1.5*iqr) | x$Length_mm>(Q[2] 1.5*iqr)
)
}
)
)
導致
Area Season Species Length_mm out
6 Christchurch Autumn dolphin 52 FALSE
7 Christchurch Autumn dolphin 54 FALSE
8 Christchurch Autumn dolphin 46 FALSE
9 Christchurch Autumn dolphin 40 FALSE
10 Christchurch Autumn dolphin 38 FALSE
1 Christchurch Spring dolphin 52 FALSE
2 Christchurch Spring dolphin 54 FALSE
3 Christchurch Spring dolphin 46 FALSE
4 Christchurch Spring dolphin 40 FALSE
5 Christchurch Spring dolphin 38 FALSE
16 Christchurch Autumn ray 52 FALSE
17 Christchurch Autumn ray 54 FALSE
18 Christchurch Autumn ray 46 FALSE
19 Christchurch Autumn ray 40 FALSE
20 Christchurch Autumn ray 38 FALSE
21 Christchurch Autumn ray 100 TRUE
11 Christchurch Spring ray 52 FALSE
12 Christchurch Spring ray 54 FALSE
13 Christchurch Spring ray 46 FALSE
14 Christchurch Spring ray 40 FALSE
15 Christchurch Spring ray 38 FALSE
我建議不要根據一些任意的 IQR 規則洗掉這些行,您可以使用這個新列來檢查您的資料并找出這些“例外”的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/527698.html
標籤:r循环异常值
下一篇:R包'公式'中的警告訊息
