2016-07-07 27 views

Antwort

4

andere Art und Weise:

data.frame(from = vec[-length(vec)], to = vec[-1]) 
2

Hier ist eine Methode, embed und neu anordnen Spalten mit:

# data 
temp <- c("A", "B", "C", "D", "E", "F") 

embed(temp, 2)[, c(2,1)] 

    [,1] [,2] 
[1,] "A" "B" 
[2,] "B" "C" 
[3,] "C" "D" 
[4,] "D" "E" 
[5,] "E" "F" 

diese in eine data.frame zu setzen, wickeln Sie es in data.frame:

setNames(data.frame(embed(temp, 2)[, c(2,1)]), c("from", "to")) 
    from to 
1 A B 
2 B C 
3 C D 
4 D E 
5 E F 
+2

Aus diesem Grund habe ich diese Seite lieben. Ich wusste nie von 'embed'. – JasonAizkalns

2
na.omit(data.frame(from = vec, to = dplyr::lead(vec))) 
    from to 
1 A B 
2 B C 
3 C D 
4 D E 
5 E F 
0

Wir könnten auch tun:

vec <- c("A", "B", "C", "D", "E", "F") 
x <- rep(seq(length(vec)), each=2)[-length(vec)*2][-1] 
# [1] 1 2 2 3 3 4 4 5 5 6 
data.frame(matrix(vec[x], ncol = 2, byrow = T)) 

Oder alternativ:

data.frame(t(sapply(seq(length(vec)-1), function(i) c(vec[i], vec[i+1])))) 

    # X1 X2 
# 1 A B 
# 2 B C 
# 3 C D 
# 4 D E 
# 5 E F 
2

Ein anderer Weg ist zoo Paket zu verwenden,

library(zoo) 
rollapply(vec, 2, by = 1, paste)