r - 在 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”更感兴趣
解决方案
不确定您想要的输出,但您可以检查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
或者,如果您想要id
s 的 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
推荐阅读
- node.js - 你如何让特定的人做命令
- css - 使用 TextArea 标签时如何更改 textarea 的宽度
- java - SQLNonTransientConnectionException:地址已在使用中
- tableau-api - 是否可以在没有服务器的情况下使用 tabpy?
- python - 如何删除 Matplotlib 条形图中宽度不等的条形之间的间隙
- bash - 如何检查 tcpdump 是否捕获了任何数据包?
- java - 如何更改 ComboBoxEditor 的边框?
- json - 如何使用 Spring Boot 2 CacheManager 在 Redis 中存储非类型化 JSON
- python - 如何在 Python 中将条件设置为线性拟合?
- javascript - 将在 ajax 调用中工作的 Strtotime 函数