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