我有一個df包含 5 列的資料框。Region.Label表示進行研究的區域,Sample.Label是該區域內我計算鳥類的特定區域,是Sp我在該特定區域發現的鳥類種類,Distance是鳥類與我之間的距離,Effort是我在尋找鳥類的區域。什么時候Distance是NA指該區域沒有觀察到該物種。作為資料框的一個例子,我有:
df <- data.frame(Region.Label=c("A","A","A","A","A","A","A","A"),
Sample.Label=c(1,1,1,2,2,2,3,3),
Sp=c("ZZ","ZZ","BB","ZZ","BB","CC","ZZ","BB"),
Distance=c(2,7,NA,NA,NA,6,NA,NA),
Effort=c(99,99,99,87,87,87,72,72))
df$Region.Label <- as.factor(df$Region.Label)
df$Sample.Label <- as.numeric(df$Sample.Label)
df
Region.Label Sample.Label Sp Distance Effort
1 A 1 ZZ 2 99
2 A 1 ZZ 7 99
3 A 1 BB NA 99
4 A 2 ZZ NA 87
5 A 2 BB NA 87
6 A 2 CC 6 87
7 A 3 ZZ NA 72
8 A 3 BB NA 72
在這里,我想洗掉該列的所有行NA,因為它表明該區域沒有觀察到該物種,但是當該行與另一行重復時,df$Distance我想洗掉該行,不包括列。NAdf$DistanceNAdf$Sp
我想得到這個:
Region.Label Sample.Label Sp Distance Effort
1 A 1 ZZ 2 99
2 A 1 ZZ 7 99
3 A 2 CC 6 87
4 A 3 ZZ NA 72
在此示例中,我沒有洗掉df[7,],因為Sample.Label與前面的行不同。我洗掉df[8,]是因為df[7,]和df[8,]是相等的,除了df$Sp。
有誰知道如何得到我想要的?
uj5u.com熱心網友回復:
也許,按操作分組會有所幫助 - 按“Region.Label”、“Sample.Label”、“Effort”、filter“Distance”的非 NA 元素(如果有任何非 NA 元素)或獲取第一行( row_number() == 1)
library(dplyr)
df %>%
group_by(Region.Label, Sample.Label, Effort) %>%
filter(if(all(is.na(Distance))) row_number() == 1 else !is.na(Distance)) %>%
ungroup
-輸出
# A tibble: 4 × 5
Region.Label Sample.Label Sp Distance Effort
<fct> <dbl> <chr> <dbl> <dbl>
1 A 1 ZZ 2 99
2 A 1 ZZ 7 99
3 A 2 CC 6 87
4 A 3 ZZ NA 72
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/415730.html
標籤:
