在R中具有条件的重复项
我需要在R中找到x column=“a”和x=“b”的重复项。我可以使用什么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
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))