Otra alternativa de resolución solo con la paquetería estándar:
rm(list = ls() )
## Tenemos un marco de 100 posibles participante
## que numeramos con un ID del 1 al 100 (su DNI en el estudio)
## Se asigna sexo aleatoriamente con una probablidad de 0.5 para
cada uno
marco <- data.frame(ID=1:100,sexo=sample(c(1,6),100,replace = T))
## se invita a participar a los 100 miembros del marco en 4 programas:
programas <-
c('diat','tc','cedecor','cenaresco')
## Modelizamos una probalidades de participacion independiente en
## cada en cada programa con valores:
prob.participar <- c(.6,.8,.4,.3)
names(prob.participar) <- programas
## creamos el data.frame "estudios" para pruebas :
estudios <- data.frame()
for (i in programas) {
participa <- sample(c(TRUE,FALSE),
size= length(marco$ID),
replace =T,
prob=c(prob.participar[i],1-prob.participar[i]))
xx <- subset(marco,participa)
xx$programa <- i
estudios<- rbind(estudios,xx)
}
## combinamos:
merge(estudios[,c('ID','programa')],estudios[c('ID','programa')],
by='ID') -> pares
## tabulamos:
with(pares,table(programa.x,programa.y))
## Comprobamo que las diagonales corresponde al número de
participantes en cada programa
with(estudios,table(programa))
Saludos
On 26/10/19 19:13, Carlos Ortega wrote:> Hola,
>
> Lo puedes resolver de esta forma...
> He comentado el código para que puedas seguir el resultado de cada etapa.
>
> #----------------
> library(randomNames)
> library(dplyr)
> library(tidyr)
>
> #---- Genero nombres aleatorios de "pacientes".
> ## - Estos son algunos de los que coincidirian
> nom_coin <- randomNames(50, ethnicity = 4)
>
> ## - A los que coincidirian les anado otros puramente aleatorios
> mis_datos <- data.frame(
> prog_A = sample(c(nom_coin, randomNames(70, ethnicity = 1)), 100,
> replace = FALSE),
> prog_B = sample(c(nom_coin, randomNames(70, ethnicity = 1)), 100,
> replace = FALSE),
> prog_C = sample(c(nom_coin, randomNames(70, ethnicity = 1)), 100,
> replace = FALSE),
> prog_D = sample(c(nom_coin, randomNames(70, ethnicity = 1)), 100,
> replace = FALSE)
> )
>
> # - Construyo las combinaciones dos a dos de las columnas
> res_cols <- as.data.frame(t(combn(names(mis_datos), 2)))
> res_comb <- as.data.frame(t(combn(1:ncol(mis_datos), 2)))
> res_tot <- cbind(res_cols, res_comb)
>
> # - Comparo las parejas de columnas
> for(i in 1:nrow(res_tot)) {
> val_inter <- intersect(mis_datos[, res_comb[i,1]], mis_datos[,
> res_comb[i,2]])
> res_tot[i, 5] <- length(val_inter)
> }
> res_out <- res_tot[, c(1,2,5)]
> names(res_out)[3] <- c('Qty')
>
> # - Construyo la tabla final
> res_table <- res_out %>%
> pivot_wider(names_from = V2, values_from = Qty )
> res_table
>
> #----------------
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es <http://www.qualityexcellence.es>
>
>
> El vie., 25 oct. 2019 a las 20:17, juan manuel dias
> (<juamadias en gmail.com <mailto:juamadias en gmail.com>>)
escribió:
>
> Hola,
>
> Tengo un tabla de datos con pacientes asistidos, para los cuáles
> tengo variables como dni, género, programa de atención etc. Hay
> pacientes que atendieron en más de un programa por lo cuál se
> repiten en la tabla. Lo que quiero es poder contar con una matriz
> que me permita identificar la cantidad de pacientes que coinciden
> entre programas.
>
> Va un ejemplo:
>
> image.png
> Intenté de varias formas pero no consigo hacerlo.
>
> Muchas gracias!
>
> Saludos.
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org <mailto:R-help-es en r-project.org>
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es <http://www.qualityexcellence.es>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
--
+--------------------------------------------------------------
| Francisco J. Viciana Fernández
| Dpto. Indicadores Demográficos
| Servicio de Estadísticas Demográficas y Sociales
| Instituto de Estadística y Cartografía de Andalucía
| Leonardo Da Vinci, nº 21. Isla de La Cartuja.
| 41071 SEVILLA.
| franciscoj.viciana en juntadeandalucia.es
+--------------------------------------------------------------
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL:
<https://stat.ethz.ch/pipermail/r-help-es/attachments/20191028/a9dce604/attachment.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 6052 bytes
Desc: no disponible
URL:
<https://stat.ethz.ch/pipermail/r-help-es/attachments/20191028/a9dce604/attachment.png>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: franciscoj_viciana.vcf
Type: text/x-vcard
Size: 4 bytes
Desc: no disponible
URL:
<https://stat.ethz.ch/pipermail/r-help-es/attachments/20191028/a9dce604/attachment.vcf>