[英]subset all rows with the same value in one column, grouped by another column, where at least one row of third column contains a specific letter in R
我正在從數據庫中收集數據,其中有兩個不同的 ID 標識符(ID1、Nr)。 我想收集所有重復 ID1 的行,按“Nr”分組,其中 Names 中的至少一條記錄有一個字母“a”。
df <- data_frame(ID1 = c('100', '100', '100', '100', '100', '100', '100', '100', '100'),
Nr = c('1', '1', '1', '2', '2', '2', '2', '3', '4'),
Names = c('aaa bb', 'aa bbb', 'ccc', 'ccc', 'ccc', 'ddd', 'ccc', 'ccc', 'add'))
因此,所需的 output 將是:
output <- data_frame(ID1= c('100', '100', '100', '100'),
Nr = c('1', '1', '1', '4'),
Names = c('aaa bb', 'aa bbb', 'ccc', 'add'))
先感謝您!
您可以group_by
Nr
列並使用grepl
:
library(dplyr)
df %>% group_by(Nr) %>% filter(any(grepl('a', Names)))
# ID1 Nr Names
# <chr> <chr> <chr>
#1 100 1 aaa bb
#2 100 1 aa bbb
#3 100 1 ccc
#4 100 4 add
相同的邏輯可以在基礎 R 中實現
subset(df, ave(grepl('a', Names), Nr, FUN = any))
以及data.table
:
library(data.table)
setDT(df)[, .SD[any(grepl('a', Names))], Nr]
在原始數據集中,如果您有更多ID
,您可能也希望將其包含在group_by
中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.