簡體   English   中英

子集在一列中具有相同值的所有行,按另一列分組,其中第三列的至少一行包含 R 中的特定字母

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

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