2016-07-07 121 views
3

矢量EdgeList都我有一个像向量:如何创建一个从R中

c("A", "B", "C", "D", "E", "F") 

,我想创建一个像

"from" "to" 
A B 
B C 
C D 
D E 
E F 

一个数据帧我怎么能做到呢?

回答

4

另一种方式:

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

下面是使用一种方法embed并重新排列列:

# 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" 

把这个变成一个data.frame,敷在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

这就是为什么我喜欢这个网站。从来不知道“嵌入”。 – 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

我们也可以这样做:

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)) 

或者:

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

另一种方法是使用zoo包,

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