J'ai une base de données avec 627 observations et 16 variables sont présentes. J'envisage une colonne nommée "ZoneDivison" qui a des facteurs: nord-est, est et sud-est. Donc, je veux comparer les valeurs des lignes adjacentes et créer une nouvelle colonne qui a 1, si deux lignes adjacentes ont les mêmes zones, sinon 0, si les lignes adjacentes sont différentes.
J'ai fait référence aux liens suivants pour trouver un moyen en dehors: [ici] Correspondance de deux colonnes dans R [ici] comparer les valeurs de ligne sur plusieurs lignes (R) p>
Expected Result ZoneDivision ZoneMatching 1 Eastern NA 2 Eastern 1 3 Eastern 1 4 North Eastern 0 5 North Eastern 1 6 North Eastern 1 7 North Eastern 1 8 North Eastern 1 9 North Eastern 1 10 South Eastern 0 11 South Eastern 1 12 South Eastern 1 Actual Result ZoneDivision ZoneMatching 1 Eastern NA 2 North Eastern NA 3 South Eastern NA
library(dplyr) a <- c(rep("Eastern",3),rep ("North Eastern", 6),rep("South Eastern", 3)) a=data.frame(a) colnames(a)="ZoneDivision" #comparing the zones library(plyr) ddply(n, .(ZoneDivision),summarize,ZoneMatching=Position(isTRUE,ZoneDivision))
Comment dois-je procéder? Veuillez aider !!
4 Réponses :
Vous pouvez utiliser lag
pour obtenir cela:
library(dplyr) a %>% mutate(ZoneMatching = as.numeric((ZoneDivision == lag(ZoneDivision, 1)))) ZoneDivision ZoneMatching 1 Eastern NA 2 Eastern 1 3 Eastern 1 4 North Eastern 0 5 North Eastern 1 6 North Eastern 1 7 North Eastern 1 8 North Eastern 1 9 North Eastern 1 10 South Eastern 0 11 South Eastern 1 12 South Eastern 1
En utilisant la base R, nous pouvons faire
as.numeric(c(NA, a$ZoneDivision[-1] == a$ZoneDivision[-nrow(a)])) #[1] NA 1 1 0 1 1 1 1 1 0 1 1
Merci Ronak, cela a aidé.
La méthode data.table:
a <- c(rep("Eastern",3),rep ("North Eastern", 6),rep("South Eastern", 3)) dt <- as.data.table(a) dt[,'ZoneMatching' := as.numeric(.SD[,a] == shift(.SD[,a],1))]
Où vous ajoutez une nouvelle colonne ZoneMatching comme valeurs numériques de la comparaison logique entre le a strong> et les valeurs décalées, générées par la fonction shift () .
Nous pouvons utiliser base R
with(a, c(NA, +(head(ZoneDivision, -1) == tail(ZoneDivision, -1)))) #[1] NA 1 1 0 1 1 1 1 1 0 1 1