Другим вариантом в tidyverse
было бы получить distinct
строки, сгруппированные по «видам», summarise
«вхождение» как количество строк (n()
) и использовать str_c
(из * 1006). * - часть пакетов tidyverse
- что также дает другое поведение при наличии NA
элементов) для collapse
элементов в одну строку
library(dplyr)
library(stringr)
df %>%
distinct() %>%
group_by(species) %>%
summarise(occurrence = n(),
BIN = str_c(unique(BIN), collapse = ","))
# A tibble: 7 x 3
# species occurrence BIN
# <chr> <int> <chr>
#1 Clupea_harengus 1 BOLD:AAB7944
#2 Eutrigla_gurnardus 2 BOLD:AAC0262,BOLD:AAE9187
#3 Fundulus_rubrifrons 1 BOLD:AAI7245
#4 Gadus_morhua 1 BOLD:ACF1143
#5 Sprattus_sprattus 1 BOLD:AAE9187
#6 Tilapia_guineensis 1 BOLD:AAL5979
#7 Tilapia_zillii 1 BOLD:AAB9042
Если есть элементы NA
, поведение будет немного другим (если мы сначала не позаботимся о NA
s)
paste(c(NA, 'a', 'b'), collapse=",")
#[1] "NA,a,b"
str_c(c(NA, 'a', 'b'), collapse=",")
#[1] NA
данные
df <- structure(list(species = c("Tilapia_guineensis", "Tilapia_zillii",
"Fundulus_rubrifrons", "Eutrigla_gurnardus", "Eutrigla_gurnardus",
"Sprattus_sprattus", "Gadus_morhua", "Clupea_harengus"), BIN = c("BOLD:AAL5979",
"BOLD:AAB9042", "BOLD:AAI7245", "BOLD:AAC0262", "BOLD:AAE9187",
"BOLD:AAE9187", "BOLD:ACF1143", "BOLD:AAB7944")),
class = "data.frame", row.names = c("2",
"3", "4", "5", "6", "7", "8", "9"))