J'essaie d'utiliser une formule Multirow pour avoir une nouvelle colonne calculée, mais ne peut pas le comprendre tout à fait.
Supposons que mes données sont ceci: p>
x y 1 2 1 2 1 6 1 7 2 4 2 5 2 9
3 Réponses :
Essayez ceci:
# load package library(dplyr) # reproduce your data df <- data.frame(x = rep(1:2, c(4, 3)), y = c(2, 2, 6, 7, 4, 5, 9)) df %>% mutate(z = case_when(x == lag(x) ~ y - lag(x), TRUE ~ 0))
ou dans la base r Ceci peut être fait avec données strong> p> ifelse code>
Fonctions arithmétiques booléennes avec la tête et la queue utilisée pour construire les variables à la traîne. (première mise en œuvre a utilisé une mauvaise logique):
dat$new <- with(dat, c(0, # starting value for no prior x tail(y,-1)-head(x, -1)) * #The values if x[-1]==x # then construct the x[-1] == x logical vector ( c(0, # starting tail(x,-1)== head(x,-1)))) # prior x == current x > dat x y new 1 1 2 0 2 1 2 1 3 1 6 5 4 1 7 6 5 2 4 0 6 2 5 3 7 2 9 7
La première chose à faire est de spécifier ce que vous voulez pour votre première valeur.
Et fournir une sortie attendue pour vos données d'échantillonnage.
@Divibisan: Je ne pense pas que c'était un duplicata, bien que je ne excluais pas la possibilité que d'autres questions impliquées à l'aide d'une variable de décalage pour construire une deuxième variable puissent exister.
@ 42- Je suis totalement incertain sur ce qu'ils essaient de faire, mais si c'est ce que fait toutes les 3 de ces réponses, alors j'avais tort sur la duplicata