在這種型別的資料中:
df <- data.frame(
Sequ = c(1,1,2,2,2,3,3,3),
G = c("A", "B", "*", "B", "A", "A", "*", "B")
)
我需要過濾掉通過分組的行Sequ IFF的Sequ-第一個值*。我可以這樣做,但想知道是否有更直接和更優雅的方式dplyr:
library(dplyr)
df %>%
group_by(Sequ) %>%
mutate(check = ifelse(first(G)=="*", 1, 0)) %>%
filter(check != 1)
# A tibble: 5 × 3
# Groups: Sequ [2]
Sequ G check
<dbl> <chr> <dbl>
1 1 A 0
2 1 B 0
3 3 A 0
4 3 * 0
5 3 B 0
uj5u.com熱心網友回復:
我們可以使用subset 嘗試以下基本 R 代碼ave
subset(
df,
!ave(G == "*", Sequ, FUN = function(x) head(x, 1))
)
這使
Sequ G
1 1 A
2 1 B
6 3 A
7 3 *
8 3 B
uj5u.com熱心網友回復:
另一種base R選擇duplicated
subset(df, !Sequ %in% Sequ[G == "*" & !duplicated(Sequ)])
Sequ G
1 1 A
2 1 B
6 3 A
7 3 *
8 3 B
uj5u.com熱心網友回復:
這是一個直接的dplyr方法:
library(dplyr)
df %>%
group_by(Sequ) %>%
filter(!first(G == "*"))
Sequ G
<dbl> <chr>
1 1 A
2 1 B
3 3 A
4 3 *
5 3 B
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/394685.html
