我有一个包含三列的数据集,理论上应该具有相同数量的唯一观察结果。
这是数据示例:
speciesID common_name species
s001 common lizard Zootoca vivipara
s002 social tuco-tuco Ctenomys sociabilis
s002 social tuco-tuco Ctenomys sociabilis
s002 social tuco-tuco Ctenomys sociabilis
s002 social tuco-tuco Ctenomys sociabilis
s002 social tuco-tuco Ctenomys sociabilis
s003 red grouse Lagopus lagopus scoticus
s003 red grouse Lagopus lagopus scoticus
s004 elk Cervus elaphus
完整的数据集可以在这里找到。
但是,当我检查唯一观察值的数量时,它们并不匹配。
df %>% as_tibble() %>% count(speciesID) %>% nrow() #148 unique values
df %>% as_tibble() %>% count(common_name) %>% nrow() #150 unique values
df %>% as_tibble() %>% count(species) %>% nrow() #147 unique values
有没有办法找出 2 个缺失的唯一值来自
speciesID
列以及 3 个缺失的唯一值来自 species
列?
理想情况下,我希望能够识别问题行,以便我可以返回原始数据并修复错误(即应该有 150 个唯一记录)。
我希望有一种方法可以在 R 中执行此操作,而不是手动检查约 700 行数据。
我确实使用
anti_join
进行了探索,但这并不是很成功。
我在 R 领域工作,对
dplyr
最满意。
找到重复内容的一种方法:
aa <- readr::read_csv("clean_data_species.csv")[,-1]
distinct(aa) |>
filter(.by = speciesID, n() > 1)
# # A tibble: 6 × 3
# speciesID common_name species
# <chr> <chr> <chr>
# 1 s011 banner-tailed kangaroo rat Dipodomys spectabilis
# 2 s011 dwarf mongoose Helogale parvula
# 3 s030 north american red squirrel Tamiasciurus hudsonicus
# 4 s030 eurasian red squirrel Sciurus vulgaris
# 5 s045 northern spotted owl Strix occidentalis caurina
# 6 s045 grey red-backed vole/grey-sided vole Clethrionomys rufocanus
distinct(aa) |>
filter(.by = common_name, n() > 1)
# # A tibble: 2 × 3
# speciesID common_name species
# <chr> <chr> <chr>
# 1 s015 great tit Parus major
# 2 s073 great tit Parus major
distinct(aa) |>
filter(.by = species, n() > 1)
# # A tibble: 8 × 3
# speciesID common_name species
# <chr> <chr> <chr>
# 1 s015 great tit Parus major
# 2 s020 gray jay Perisoreus canadensis
# 3 s073 great tit Parus major
# 4 s074 pied babbler Turdoides bicolor
# 5 s109 eurasian kestrel Falco tinnunculus
# 6 s110 southern pied babblers Turdoides bicolor
# 7 s129 canada jay Perisoreus canadensis
# 8 s106 common kestrel Falco tinnunculus
每一行都表示其中一列中存在重复值。例如,在
speciesID
中,我们有 3 个值,其中有 2 行:s011
、s030
和 s045
,我们可以在此处看到 common_name
和 species
的具体值成对。
类似地,对于
common_name
(只有一个级别是重复的,事实上几乎完美)和species
(四对,一些具有共同点)。