Объединить двухкомпонентную переменную в фактор, включающий субъектов с несколькими уровнями - PullRequest
0 голосов
/ 25 октября 2019

Сначала немного предыстории относительно моей проблемы. Я извлек информацию о статистических методах, используемых в конкретном контексте исследования. Мы определили конкретный «шаблон», которому большинство людей следуют в процессе анализа, и хотели бы визуализировать этот поток анализа в аллювиальном графике. Мы определили несколько областей (скажем, 3), на которых сосредоточились люди. В каждом домене есть несколько разных методов, которые люди применяют для анализа. Мы извлекли данные в электронную таблицу, которая состоит только из двухчастных переменных, таким образом, указав, использовала ли запись определенный метод (кодированный как 1) или нет (кодированный как 0). Мы выбрали этот подход, так как методы в домене не были взаимоисключающими, поэтому часто использовалось несколько методов. Предполагая, что в каждой области имеется 5 методов, получается матрица с 3 * 5 = 15 столбцами, из которых 5 принадлежат одному домену.

В аллювиальном графике я хотел бы представить каждый домен как осьсо стратами в соответствии с методами в соответствующей области. Поэтому для пакета «ggalluvial» требуется один фактор для каждой оси, а уровни факторов представляют страты / методы. Я надеюсь, что до сих пор все ясно.

Важным моментом является то, что я не могу легко преобразовать свои двоичные данные в факторы, поскольку субъектам разрешено быть в нескольких категориях. Следовательно, мне нужно преобразовать данные таким образом, чтобы 1. все переменные, принадлежащие одному домену, были объединены в фактор 2. в случае, если один субъект попадает в два уровня факторов, создается новая строка для второй категории 3. в случае одногосубъект использует несколько методов в нескольких доменах, для каждой комбинации создаются новые строки.

Я пытался использовать различные комбинации сбора и распространения, однако эти функции не могут учитывать зависимость методов в одном домене. Вот пример того, как структурированы данные и как должны выглядеть выходные данные.

x <-ifelse(runif(20,1) > 0.5,1,0)

for (i in 1:3) {
  y <- ifelse(runif(20,0,1) > 0.5,1,0)
  x <- cbind(y,x)

} 
names(x) <- c("a1","a2","b1","b2")
x

Надлежащий вывод должен иметь столбцы (A1, A2) и> 20 строк, как для любой возможной комбинацииновая строка должна быть добавлена. Например:

Если в одной записи используются a1 и a2, но только b1, необходимо сгенерировать две строки

AB
a1 b1
a2 b2

и это должно сохраняться для каждой возможной комбинации.

Заранее спасибо, надеюсь, моя проблема ясна! Если есть какие-либо открытые вопросы, пожалуйста, дайте мне знать.

...