2017-10-20 3 views
3

Je voudrais créer une nouvelle colonne à partir d'une colonne existante, mais une ligne au-dessusCréer une nouvelle base de la colonne sur la colonne existante, mais ligne au-dessus

A partir de:

df <- data.frame(a=c(1:10), b=c("red", "yellow", "blue", "green", "yellow", "purple", "blue", "green", "yellow", "purple")) 

Avec le résultat ressemblant à:

df <- data.frame(a=c(1:10), b=c("red", "yellow", "blue", "green", "yellow", "purple", "blue", "green", "yellow", "purple"), c=c("na", "red", "yellow", "blue", "green", "yellow", "purple", "blue", "green", "yellow")) 

Merci pour toute aide que vous êtes en mesure de fournir

Répondre

1

une façon avec shift du paquet data.table:

library(data.table) 
df$c <- shift(df$b, 1) 

df 
# a  b  c 
#1 1 red <NA> 
#2 2 yellow red 
#3 3 blue yellow 
#4 4 green blue 
#5 5 yellow green 
#6 6 purple yellow 
#7 7 blue purple 
#8 8 green blue 
#9 9 yellow green 
#10 10 purple yellow 
1

En utilisant dplyr cela peut être fait avec mutate et lag fonctions:

library(dplyr) 
mutate(df, c = lag(b)) 

#>  a  b  c 
#> 1 1 red <NA> 
#> 2 2 yellow red 
#> 3 3 blue yellow 
#> 4 4 green blue 
#> 5 5 yellow green 
#> 6 6 purple yellow 
#> 7 7 blue purple 
#> 8 8 green blue 
#> 9 9 yellow green 
#> 10 10 purple yellow