Обновление
Спасибо @jazzurro за его ответ. Это заставило меня понять, что дубликаты могут только усложнить вещи. Я надеюсь, что сохранение только уникальных значений / строк упрощает задачу. *
df <- data.frame(ID = c(1,2,3,4,5),
CTR1 = c("England", "England", "England", "China", "Sweden"),
CTR2 = c("England", "China", "China", "England", NA),
CTR3 = c("USA", "USA", "USA", "USA", NA),
CTR4 = c(NA, NA, NA, NA, NA),
CTR5 = c(NA, NA, NA, NA, NA),
CTR6 = c(NA, NA, NA, NA, NA))
ID CTR1 CTR2 CTR3 CTR4 CTR5 CTR6
1 England China USA
2 England China USA
3 England China USA
4 China England USA
5 Sweden
Цель по-прежнему заключается в создании матрицы совместного использования (сейчас) на основе следующих четырех условий:
Отдельные наблюдения без дополнительных наблюдений по идентификатору / строке не учитываются, т. Е. Строка, в которой один раз указана только одна страна, считается как 0.
Комбинация / ко - вхождение должно быть подсчитано как 1.
При нахождении в комбинации также учитывается как самосочетание (США-США), т. е. присваивается значение 1.
Нет значения более 1, назначенного комбинации по строке / идентификатору.
Ожидаемый результат
China England USA Sweden
China 4 4 4 0
England 4 4 4 0
USA 4 4 4 0
Sweden 0 0 0 0
* Я использовал код из здесь , чтобы удалить все неуникальные наблюдения.
Исходное сообщение
Предположим, у меня есть набор данных с небольшим числом столбцов di git (немного NA / пусто) и более 100 000 строк, представленных в следующем примере кадра данных
df <- data.frame(ID = c(1,2,3,4,5),
CTR1 = c("England", "England", "England", "China", "England"),
CTR2 = c("England", "China", "China", "England", NA),
CTR3 = c("England", "China", "China", "England", NA),
CTR4 = c("China", "USA", "USA", "China", NA),
CTR5 = c("USA", "England", "USA", "USA", NA),
CTR6 = c("England", "China", "USA", "England", NA))
df
ID CTR1 CTR2 CTR3 CTR4 CTR5 CTR6
1 England England England China USA England
2 England China China USA England China
3 England China China USA USA USA
4 China England England China USA England
5 England
и я хочу сосчитать совпадения по идентификатору / строке, чтобы получить матрицу совпадений, которая суммирует совпадение по идентификатору / строке только один раз, что означает, что никакое значение больше 1 не будет назначить комбинации (т. е. присвоить значение 1 для существования совместного вхождения, независимого от частот и порядка в ряду, присвоить значение 0 для отсутствия одновременного вхождения / комбинации по идентификатору / строке),
1 England-England-England => 1
2 England-England => 1
3 England-China => 1
4 England- => 0
Еще один важный аспект касается подсчета наблюдений, которые появляются один раз подряд, но в сочетании с другими, например, США в строке 1 . Они должны получить значение 1 для своего совместного вхождения (так как они находятся в комбинации, хотя и не с самими собой), чтобы комбинации США-США также получили назначенное значение 1.
1 England England England China USA England
USA-USA => 1
China-China => 1
USA-China => 1
England-England => 1
England-USA => 1
England-China => 1
Из-за того, что количество строк не должно> 1 для комбинации по строке / идентификатору, это приводит к:
China England USA
China 1 1 1
England 1 1 1
USA 1 1 1
Это должно привести к следующему результату на основе примера кадра данных, где Значение 4 присваивается каждой комбинации на основе того факта, что каждая комбинация произошла как минимум в четырех строках, и каждая строка является частью комбинации исходного кадра данных:
China England USA
China 4 4 4
England 4 4 4
USA 4 4 4
Таким образом, существует пять условий для подсчет:
- Отдельные наблюдения без дополнительных наблюдений по идентификатору / строке не учитываются, т. е. строка с одной единственной страной не учитывается.
- Комбинация должна учитываться как 1 .
- Наблюдения, происходящие более одного раза, не способствуют более высокой ценности взаимодействия, то есть нескольким случаям одного и того же взаимодействия. Untry не имеет значения.
- Нахождение в комбинации (даже в том случае, если одна и та же страна не появляется дважды подряд) приводит к тому, что считается как самосочетание, т.е. присваивается значение 1.
- Не существует значения более 1, назначенного комбинации по строке / идентификатору.
Я пытался реализовать это с помощью dplyr
, data.table
, base aggregate
или plyr
корректирующий код от [1] , [2] , [3] , [4] , [5 ] и [6] но так как мне не важен порядок в ряду, но я также не хочу суммировать все комбинации в ряду, у меня нет ожидаемого результата пока.
Я новичок в R. Любая помощь очень ценится.