R:提取属于同一组的行

时间:2019-03-13 23:43:09

标签: r for-loop

我正在尝试在控制台上打印属于同一组的所有行。 但是,请跳过属于唯一组的记录。

  id1 id2 name dob sex group
1   1   2    0   1   0       1
2   1   3    0   0   1       2
3   1   4    1   1   1       2
4   2   3    0   0   0       3
5   2   4    0   1   0       4
6   3   4    0   0   1       4
4   2   3    0   0   0       4
5   2   4    0   1   0       5
6   3   4    0   0   1       6

结果:

  id1 id2 name dob sex group
2   1   3    0   0   1       2
3   1   4    1   1   1       2

  id1 id2 name dob sex group
5   2   4    0   1   0       4
6   3   4    0   0   1       4
4   2   3    0   0   0       4

下面的代码非常适合获取非唯一的代码,但是我需要一个for循环才能将其打印到屏幕上。

library(dplyr)
dfC %>% 
  group_by(group) %>% 
  filter(n()>1) 

1 个答案:

答案 0 :(得分:1)

我们可以将group_walkprint一起使用

library(dplyr)
dfC %>% 
  group_by(grp = group) %>% 
  filter(n() > 1) %>% 
  group_walk(print)
# A tibble: 2 x 6
#    id1   id2  name   dob   sex group
#  <int> <int> <int> <int> <int> <int>
#1     1     3     0     0     1     2
#2     1     4     1     1     1     2
# A tibble: 3 x 6
#    id1   id2  name   dob   sex group
#  <int> <int> <int> <int> <int> <int>
#1     2     4     0     1     0     4
#2     3     4     0     0     1     4
#3     2     3     0     0     0     4

数据

dfC <- structure(list(id1 = c(1L, 1L, 1L, 2L, 2L, 3L, 2L, 2L, 3L), id2 = c(2L, 
3L, 4L, 3L, 4L, 4L, 3L, 4L, 4L), name = c(0L, 0L, 1L, 0L, 0L, 
0L, 0L, 0L, 0L), dob = c(1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L), 
    sex = c(0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L), group = c(1L, 
    2L, 2L, 3L, 4L, 4L, 4L, 5L, 6L)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9"))