#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, я вижу, что хочу, но мне нужно перенести таблицу. Мне трудно создать это с помощью dplyr5. Логика, лежащая в основе «Итак, когда 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