J'ai un ensemble de données plus grand suivant le même ordre, une colonne de date unique, des données, une colonne de date unique, une date, etc. J'essaie de sous-définir non seulement la colonne de données par nom mais également la colonne de date unique. Le code ci-dessous sélectionne les colonnes en fonction d'une liste de noms, ce qui fait partie de ce que je veux, mais des idées sur la façon dont je peux récupérer la colonne immédiatement avant la colonne sous-définie également?
Vous cherchez à vous retrouver avec un DF contenant les colonnes Date1, Fire, Date3, Earth (en utilisant uniquement la NameList).
Voici mon code reproductible:
Cnames <- c("Date1","Fire","Date2","Water","Date3","Earth")
MAINDF <- data.frame(replicate(6,runif(120,-0.03,0.03)))
colnames(MAINDF) <- Cnames
NameList <- c("Fire","Earth")
NewDF <- MAINDF[,colnames(MAINDF) %in% NameList]
Que diriez-vous
NameList <- c("Fire","Earth")
idx <- match(NameList, names(MAINDF))
idx <- sort(c(idx-1, idx))
NewDF <- MAINDF[,idx]
Ici, nous utilisons match()
pour trouver l'index de la colonne souhaitée, puis nous pouvons utiliser la soustraction d'index pour saisir la colonne avant
Utilisez which
pour obtenir les numéros de colonne à partir des noms, puis c'est juste une arithmétique simple:
col.num <- which(colnames(MAINDF) %in% NameList)
NewDF <- MAINDF[,sort(c(col.num, col.num - 1))]
Produit
Date1 Fire Date3 Earth
1 -0.010908003 0.007700453 -0.022778726 -0.016413307
2 0.022300509 0.021341360 0.014204445 -0.004492150
3 -0.021544992 0.014187158 -0.015174048 -0.000495121
4 -0.010600955 -0.006960160 -0.024535954 -0.024210771
5 -0.004694499 0.007198620 0.005543146 -0.021676692
6 -0.010623787 0.015977135 -0.027741109 -0.021102651
...