Мы можем сделать это легко с base R
, разделив столбец 'регионов' на ,
, установив имена элементов list
с "видами", преобразовав list
в двух столбец data.frame.с stack
и получить частоту с table
table(stack(setNames(strsplit(df1$regions, ","), df1$species)))
# ind
#values species1 species2 species3
# area1 1 0 0
# area2 0 1 1
# area3 0 1 1
или более компактно с mtabulate
library(qdapTools)
cbind(df1[1], mtabulate(strsplit(df1$regions, ",")))
# species area1 area2 area3
#1 species1 1 0 0
#2 species2 0 1 1
#3 species3 0 1 1
data
df1 <- structure(list(species = c("species1", "species2", "species3"
), regions = c("area1", "area2,area3", "area2,area3")),
class = "data.frame", row.names = c(NA,
-3L))