改变这个:
From To
A D
B E
C F
为:
From To
A B
B C
D E
E F
我的数据包含数百行,而不是示例中的3行。
注意:澄清初始data.frame
中的名称是两个单独的路径,我想将其格式化为边缘列表。我不想连接这两条路径。
在这种情况下,我们想要消除C和D之间的边缘。
答案 0 :(得分:2)
使用zoo
试试这个?
A=c(Data$From,Data$To)
B=as.data.frame(zoo::rollapply(A,2,paste))
V1 V2
1 A B
2 B C
3 C D
4 D E
5 E F
B[!B$V1%in%Data$From[length(Data$From)],]
V1 V2
1 A B
2 B C
4 D E
5 E F
PS。使用names(df)=c('Form','To')
答案 1 :(得分:2)
全部在 Base R
:
#[-nrow(dat), ] This removes the link between to columns (i.e. From C To D row)
data.frame(From = unlist(dat)[-length(unlist(dat))], To = unlist(dat)[-1],
row.names = NULL)[-nrow(dat), ]
## From To
## 1 A B
## 2 B C
## 4 D E
## 5 E F
<强> 数据:的强>
dat <- structure(list(From = structure(1:3, .Label = c("A", "B", "C"
), class = "factor"), To = structure(1:3, .Label = c("D", "E",
"F"), class = "factor")), .Names = c("From", "To"), row.names = c(NA,
3L), class = "data.frame")
答案 2 :(得分:1)
df <- data.frame(From=LETTERS[1:3], To=LETTERS[4:6], stringsAsFactors=F)
library(dplyr)
df1 <- data.frame(From = head(unlist(df),-1), To = head(lead(unlist(df)),-1)) %>%
filter(row_number() != nrow(df))
unlist
按行列出您的df
。 lead
将条目移到某个位置。
From To
1 A B
2 B C
3 D E
4 E F