Итак, у меня есть действительно огромный фрейм данных, в котором есть два столбца символов. символы представляют собой некоторые значения идентификаторов, разделенные знаком «;». Итак, я хочу рассчитать количество общих значений идентификатора между этими двумя столбцами. Вот пример:
id.x id.y
1 123;145;156 143;156;234;165
2 134;156;187;675 132;145;156;187
поэтому в этом случае первая строка имеет 1 общее значение, а вторая строка имеет два общих значения.
Размер таблицы составляет 60 миллионов записей, а длина некоторых строк может превышать 1000. Я попытался записать данные в текстовый файл и выполнить этот анализ с помощью python, но размер файла составляет 30 ГБ. Любая идея сделать это в R? (regex, применить, ..)
Я могу подсчитать количество общих значений с помощью этой команды:
intersect(strsplit(df[1,"ind.x"], split=";")[[1]], strsplit(df[1,"ind.y"], split=";") [[1]])
Поэтому я написал функцию:
myfun <- function(x,y) {
length(intersect(strsplit(x, split=";")[[1]], strsplit(y, split=";")[[1]]))
}
который работает, когда я пробую его с одним вызовом, но когда я использую его с mapply, как показано ниже, он печатает все столбцы, но мне нужен только номер на выходе:
> mapply(FUN=myfun, df[1:2,]$id.x, df[1:2,]$id.y)
123;145;156 134;156;187;675
1 2
Итак, почему он печатает и первый столбец? Что не так с моей командой?