Вы можете сосчитать количество уникальных животных, которым владеет каждый человек, и разделить его на общее количество уникальных животных. Это можно сделать с помощью tapply
как:
owned.animal <- function(df) {
tapply(df[[1]], df[[2]], function(x)
length(unique(x)))/length(unique(df[[1]])) * 100
}
owned.animal(df)
#max tom
#100 50
В dplyr вы можете посчитать количество уникальных значений с помощью n_distinct
library(dplyr)
df %>% group_by(V2) %>% summarise(n = n_distinct(V1)/n_distinct(df$V1) * 100)
данных
df <- structure(list(V1 = c("dog", "dog", "cat", "cat"), V2 = c("max",
"max", "tom", "max")), class = "data.frame", row.names = c(NA, -4L))