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 (<[email protected] <mailto:[email protected]>>) 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
    [email protected] <mailto:[email protected]>
    https://stat.ethz.ch/mailman/listinfo/r-help-es



--
Saludos,
Carlos Ortega
www.qualityexcellence.es <http://www.qualityexcellence.es>

_______________________________________________
R-help-es mailing list
[email protected]
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.
| [email protected]
+--------------------------------------------------------------

<<attachment: franciscoj_viciana.vcf>>

_______________________________________________
R-help-es mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-help-es

Responder a