首页 > 解决方案 > 在 r 中查找匹配或不匹配的值

问题描述

我有一个中等大小的数据框,就像我在下面制作的一样,(尽管有几列)我想在其中查找是否有任何“id”有不同的“字母”我想有一种简单的方法可以做到这一点,也许与 tidyr?

df<-data.frame("id"=c(1, 1, 2, 3, 3, 3, 4, 4, 5, 6, 6), "letter"=c("f", "f", 
"r", "r", "k", "k", "k", "k", "r", "f", "r"))

编辑:我试图找到有多个字母的“id”。即在这个df id 3和6中。我对哪个“字母”不太感兴趣(尽管显示它们也不错),对哪个“id”更感兴趣

标签: rtidyr

解决方案


不确定您想要的输出,但您可以检查letter每个对应的 s 数量id

library(dplyr)

df %>%
  group_by(id) %>%
  summarise(n_letters = n_distinct(letter))

A tibble: 6 x 2
     id n_letters
  <dbl>     <int>
1     1         1
2     2         1
3     3         2
4     4         1
5     5         1
6     6         2

如果你只想要一个id只有 1 个字母的 s 向量:

df %>%
  group_by(id) %>%
  summarise(n_letters = n_distinct(letter)) %>%
  filter(n_letters == 1) %>%
  pull(id)

[1] 1 2 4 5

或者,如果您想要ids 的 df 超过 1 个字母:

multiple_letter_ids <- df %>%
  group_by(id) %>%
  summarise(n_letters = n_distinct(letter)) %>%
  filter(n_letters > 1) %>%
  pull(id)

df %>% filter(id %in% multiple_letter_ids)

 id letter
1  3      r
2  3      k
3  3      k
4  6      f
5  6      r

推荐阅读