Как составить таблицу вероятностей на основе трех столбцов с помощью dplyr

#r #dplyr #tidyverse

Вопрос:

У меня есть данные, которые выглядят так,

 df <- data.frame(col1=c(0,0,20,20),col2=c(12,20,12,20), fill=c(0,1,1,1))

  col1 col2 fill
1    0   12    0
2    0   20    1
3   20   12    1
4   20   20    1
 

Матрица взаимодействия: Col1 Против Col2, основанная на заполнении==»0″

Моя мотивация состоит в том, чтобы создать двудольный граф, и мне нужно взаимодействие типов между col1 и col2. Таким образом, при 0: 12 вероятность столкнуться с нулем равна 0,50. Когда 0 встречается с 20, вероятность столкнуться с нулем равна 0 и т. Д. Мне нужно, чтобы в столбцах были уникальные элементы col1, а в строках-уникальные элементы Col2

     0    20 
12 0.50  0

20 0     0

 

Любая помощь будет высоко оценена

Обновить______

Если я использую следующую функцию, то получу желаемые результаты для заполнения=0. Однако я еще не могу подмножествовать таблицу b, чтобы взять то, что я хочу, и я не могу создать тот же результат с помощью dplyr, как я хочу

 df %>% 
  table() %>% 
  prop.table(.,1)

, , fill = 0

    col2
col1  12  20
  0  0.5 0.0
  20 0.0 0.0

, , fill = 1

    col2
col1  12  20
  0  0.0 0.5
  20 0.5 0.5

 

Комментарии:

1. Вы можете использовать df %>% group_by(col1) %>% summarise(val = mean(fill == 0)) . Хотя я не уверен, как 12 и 20 в именах строк связаны с выводом.

2. ты прав, Ронак. Это мое плохое, что мне нужно. Я должен был объяснить лучше. Я хочу создать двудольный граф, и мне нужно взаимодействие типов. Таким образом, при 0: 12 вероятность столкнуться с нулем равна 0,50. Когда 0 встречается с 20, вероятность столкнуться с нулем равна 0

3. Да, но как связаны имена строк 12 и 20 в выходных данных. col1 = 0 имеет только 1 значение, где col2 = 12 . Работает ли для вас мой вышеприведенный комментарий?

4. Я понимаю вашу точку зрения. Я постараюсь прояснить ситуацию получше. Например, если я использую эти функции a=table(df) prop.table(a, 1) В таблице 1, где fill=0, я вижу, что хочу, но мне нужно перенести таблицу. Мне трудно создать это с помощью dplyr

5. Логика, лежащая в основе «Итак, когда 0 me[e]ts 12, вероятность столкнуться с нулем равна 0,50. Когда 0 встречается с 20, вероятность столкнуться с нулем равна 0 и т. Д.» Неясно.

Ответ №1:

Это может быть ответом на мой вопрос. Большое спасибо Ронаку за его комментарии и помощь

 df %>% 
  table() %>% 
  prop.table(.,1) %>% 
  as.data.frame() %>% {
    with(.[.$fill=="0",],table(col2,col1))
  }
     col1
col2 0 20
  12 1  1
  20 1  1