vendredi 24 juillet 2020

Clean way to analyze column values and make a new column with a grouping factor in R

I was wondering if there was a cleaner way to do what I have already done, this code actually works, but I wanted to probe the expertise of people in the house in order to be able to do this a better way.

Suppose we simply have some data with a column of an identifier by participant we will call it indiv for the sake of our example, therefore we have a data frame with 36 subjects and all of them numbered and I want to create a new column every two individuals and name it as dyad and a dynamic numbering.

indiv <- c(1:36)
freq <- data.frame(indiv)

freq$ID <-  vector(length = dim(freq)[1])
for (i in 1:nrow(freq)) {
  if (0<freq$indiv[i]&&freq$indiv[i]<=2){freq$ID[i] <- print("dyad01")}
  else if (2<freq$indiv[i]&&freq$indiv[i]<=4){freq$ID[i] <- print("dyad02")} 
  else if (4<freq$indiv[i]&&freq$indiv[i]<=6){freq$ID[i] <- print("dyad03")} 
  else if (6<freq$indiv[i]&&freq$indiv[i]<=8){freq$ID[i] <- print("dyad04")} 
  else if (8<freq$indiv[i]&&freq$indiv[i]<=10){freq$ID[i] <- print("dyad05")} 
  else if (10<freq$indiv[i]&&freq$indiv[i]<=12){freq$ID[i] <- print("dyad06")} 
  else if (12<freq$indiv[i]&&freq$indiv[i]<=14){freq$ID[i] <- print("dyad07")} 
  else if (14<freq$indiv[i]&&freq$indiv[i]<=16){freq$ID[i] <- print("dyad08")} 
  else if (16<freq$indiv[i]&&freq$indiv[i]<=18){freq$ID[i] <- print("dyad09")} 
  else if (18<freq$indiv[i]&&freq$indiv[i]<=20){freq$ID[i] <- print("dyad10")} 
  else if (20<freq$indiv[i]&&freq$indiv[i]<=22){freq$ID[i] <- print("dyad11")} 
  else if (22<freq$indiv[i]&&freq$indiv[i]<=24){freq$ID[i] <- print("dyad12")} 
  else if (24<freq$indiv[i]&&freq$indiv[i]<=26){freq$ID[i] <- print("dyad13")} 
  else if (26<freq$indiv[i]&&freq$indiv[i]<=28){freq$ID[i] <- print("dyad14")} 
  else if (28<freq$indiv[i]&&freq$indiv[i]<=30){freq$ID[i] <- print("dyad15")} 
  else if (30<freq$indiv[i]&&freq$indiv[i]<=32){freq$ID[i] <- print("dyad16")} 
  else if (32<freq$indiv[i]&&freq$indiv[i]<=34){freq$ID[i] <- print("dyad17")} 
  else {freq$ID[i] <- print("dyad18")} 
}

Of course this has worked for me and did the job the way I expected, however, I was wondering if anyone knows a cleaner way, just for the sake of learning and improving.

Thanks in advance!

Aucun commentaire:

Enregistrer un commentaire