library(data.table)
test <- fread("id col2
1 A
1 A
2 B
2 A")
test$col2 <- as.factor(test$col2)
id col2
1: 1 A
2: 1 A
3: 2 B
4: 2 A
From the data above I would like to simply select all columns for which the factor values in col2 are equal, so only id==1, because the factors are both A. For id==2, the factors are not equal.
How should I do this?
CodePudding user response:
In dplyr, with n_distinct:
library(dplyr)
test %>%
group_by(id) %>%
filter(n_distinct(col2) == 1)
# id col2
# 1 1 A
# 2 1 A
In data.table, with uniqueN:
library(data.table)
test[, .SD[uniqueN(col2) == 1], by = id]
# id col2
#1: 1 A
#2: 1 A
