Ich habe einen Vektor wie:wie Kantenliste von Vektor in R erstellen
c("A", "B", "C", "D", "E", "F")
und ich möchte einen Datenrahmen wie
"from" "to"
A B
B C
C D
D E
E F
schaffen, wie kann ich das erreichen?
Ich habe einen Vektor wie:wie Kantenliste von Vektor in R erstellen
c("A", "B", "C", "D", "E", "F")
und ich möchte einen Datenrahmen wie
"from" "to"
A B
B C
C D
D E
E F
schaffen, wie kann ich das erreichen?
andere Art und Weise:
data.frame(from = vec[-length(vec)], to = vec[-1])
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
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
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
Ein anderer Weg ist zoo
Paket zu verwenden,
library(zoo)
rollapply(vec, 2, by = 1, paste)
Aus diesem Grund habe ich diese Seite lieben. Ich wusste nie von 'embed'. – JasonAizkalns