Вы можете написать genderize
функцию, основанную на table
. И применить его на strsplit
. Я изменил данные author
так, чтобы в одной строке были оба мужчины.
genderize <- function(id) {
r <- table(gender[as.double(id), "gender"])
if (length(r) == 2) r <- 3
else r <- as.double(names(r))
factor(r, levels=1:3, labels=c("female", "male", "both"))
}
authors$genders <- sapply(strsplit(as.character(authors$ids), ", "), genderize)
ids genders
1 3, 7 male
2 3, 4, 5, 6, 7, 8 both
3 6 female
4 1, 4, 7, 8 both
Данные
authors <- structure(list(ids = structure(c(3L, 2L, 4L, 1L), .Label = c("1, 4, 7, 8",
"3, 4, 5, 6, 7, 8", "3, 7", "6"), class = "factor"), genders = c(NA,
NA, NA, NA)), class = "data.frame", row.names = c(NA, -4L))
gender <- structure(list(id = 1:8, gender = c(1, 1, 2, 1, 1, 1, 2, 1)), row.names = c(NA,
-8L), class = "data.frame")