在R中具有条件的重复项

在R中具有条件的重复项,r,duplicates,conditional-statements,R,Duplicates,Conditional Statements,我需要在R中找到x column=“a”和x=“b”的重复项。我可以使用什么R函数 ID x 1 a 1 b 1 c 2 c 2 b 3 a 4 a 4 b 5 c 输出: ID x 1 a 1 b 4 a 4 b 这些似乎不起作用 Data <- data.frame(ID = c(1, 1, 2, 2), Value = c(1, 2, 3, 4)) FindDups(Data, Vars = 'ID') Data您是否试图选择ID同时具有'a'和'b'值的行 library(d

我需要在R中找到x column=“a”和x=“b”的重复项。我可以使用什么R函数

ID x
1 a
1 b
1 c
2 c
2 b
3 a
4 a
4 b
5 c
输出:

ID x
1 a
1 b
4 a
4 b
这些似乎不起作用

Data <- data.frame(ID = c(1, 1, 2, 2), Value = c(1, 2, 3, 4))
FindDups(Data, Vars = 'ID')

Data您是否试图选择
ID
同时具有
'a'
'b'
值的行

library(dplyr)

df %>% group_by(ID) %>% filter(all(c('a', 'b') %in% x) & x %in% c('a', 'b'))

#     ID x    
#  <int> <chr>
#1     1 a    
#2     1 b    
#3     4 a    
#4     4 b    
以及
数据。表

library(data.table)
setDT(df)[, .SD[all(c('a', 'b') %in% x) & x %in% c('a', 'b')], ID]

也许试试这个。创建一个变量来存储等于
a、b
的元素数,然后进行筛选。这里有一个使用dplyr的代码:

library(dplyr)
#Code
newdf <- df %>% group_by(ID) %>% mutate(var=sum(x %in% c('a','b'))) %>%
  filter(x %in% c('a','b') & var==2) %>% select(-var)
库(dplyr)
#代码
newdf%group_by(ID)%%>%mutate(var=sum(x%in%c('a','b'))%%>%
过滤器(在%c('a','b')中的x%var==2)%>%select(-var)
输出:

# A tibble: 4 x 2
# Groups:   ID [2]
     ID x    
  <int> <chr>
1     1 a    
2     1 b    
3     4 a    
4     4 b    
#一个tible:4 x 2
#组别:ID[2]
ID x
11A
21 b
34A
4 b
使用的一些数据:

#Data
df <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L, 5L), x = c("a", 
"b", "c", "c", "b", "a", "a", "b", "c")), class = "data.frame", row.names = c(NA, 
-9L))
#数据

df在
filter

library(dplyr)
df %>% 
    group_by(ID) %>%
    filter(sum(c('a', 'b') %in% x) == 2, x %in% c('a', 'b'))
# A tibble: 4 x 2
# Groups:   ID [2]
#     ID x    
#  <int> <chr>
#1     1 a    
#2     1 b    
#3     4 a    
#4     4 b   
数据
df您是否尝试过“复制的()”、“唯一的()”或“==”?
library(dplyr)
df %>% 
    group_by(ID) %>%
    filter(sum(c('a', 'b') %in% x) == 2, x %in% c('a', 'b'))
# A tibble: 4 x 2
# Groups:   ID [2]
#     ID x    
#  <int> <chr>
#1     1 a    
#2     1 b    
#3     4 a    
#4     4 b   
library(data.table)
setDT(df)[df[, .I[sum(c('a', 'b') %in% x) == 2 & x %in% c('a', 'b')], ID]$V1] 
df <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L, 5L), x = c("a", 
"b", "c", "c", "b", "a", "a", "b", "c")), class = "data.frame",
row.names = c(NA, 
-9L))