删除以组第一位置的单个单元格中的值为条件的行序列

标签 r dplyr

在这种类型的数据中:

df <- data.frame(
  Sequ = c(1,1,2,2,2,3,3,3),
  G = c("A", "B", "*", "B", "A", "A", "*", "B")
)

我需要过滤掉按 Sequ 分组的行 iff Sequ-first 值为 *。我可以这样做,但想知道 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

最佳答案

这是一个直接的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    

关于删除以组第一位置的单个单元格中的值为条件的行序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70485788/

相关文章:

r - Httr header 在数字文字中返回无效字符 '-'

r - pivot_longer 在小对象上运行的内存使用情况

r - 在 dplyr::anti_join() 期间必须使用有效的下标向量子集元素

r - 如何计算R中的第二个单词字符串

将分类变量重新编码为二进制 (0/1)

java - 使用 rjava 在 jar 中对 java 方法进行 R 包装

r - 具有堆叠和分组选项的条形图,没有面网格

r - 基于第二列增加列

R:在单个因子变量上加宽多个列

r - dplyr:汇总每一列并返回列表列