分隔数据框中的箭头分隔值,以使用R?分隔不相等的列?

分隔数据框中的箭头分隔值,以使用R?分隔不相等的列?,r,csv,strsplit,R,Csv,Strsplit,我有一个具有以下示例值的数据帧 [1] "entry.cei" [2] "entry.lifecycle->hist.open.personal demand chequing account->exit.lifecycle->entry.cei" [3] "entry.lifecycle->hist.open.

我有一个具有以下示例值的数据帧

[1] "entry.cei"                                                                               
[2] "entry.lifecycle->hist.open.personal demand chequing account->exit.lifecycle->entry.cei"  
[3] "entry.lifecycle->hist.open.personal demand savings account->exit.lifecycle->entry.cei"   
[4] "entry.transaction->txn.no source available->exit.transaction->entry.cei"                 
[5] "entry.branch->exit.branch->entry.transaction->txn.in-branch->exit.transaction->entry.cei"
我需要用“->”将它们拆分成不同的列,比如V1、V2等。 例如:

           V1                             V2               V3             V4           V5     V6    V7
1   entry.cei   
2   entry.lifecycle hist.open.personal demand chequing account  exit.lifecycle  entry.cei   
3   entry.lifecycle hist.open.personal demand savings account   exit.lifecycle  entry.cei   
如何在R中实现这一点?
我尝试将rbind与strsplit()一起使用,但我认为它需要相同数量的列。

最简单的方法是使用
gsub
用逗号替换
->
,然后使用
read.csv
。如果数据中有逗号,则只需使用
而不是逗号即可

read.csv(text = gsub("->", ",", x, fixed = TRUE), header = FALSE)
#                  V1                                         V2                V3            V4               V5        V6
# 1         entry.cei                                                                                                      
# 2   entry.lifecycle hist.open.personal demand chequing account    exit.lifecycle     entry.cei                           
# 3   entry.lifecycle  hist.open.personal demand savings account    exit.lifecycle     entry.cei                           
# 4 entry.transaction                    txn.no source available  exit.transaction     entry.cei                           
# 5      entry.branch                                exit.branch entry.transaction txn.in-branch exit.transaction entry.cei
或者

read.table(text = gsub("->", ",", x, fixed = TRUE), sep = ",", fill = TRUE)

您还可以使用
rbind
strsplit
,只要您首先使所有列表元素的长度相同。
长度看看我的最新答案<代码>读取.csv
更容易
s <- strsplit(x, "->", fixed = TRUE)
data.frame(do.call(rbind, lapply(s, `length<-`, max(sapply(s, length)))))
#                  X1                                         X2                X3            X4               X5        X6
# 1         entry.cei                                       <NA>              <NA>          <NA>             <NA>      <NA>
# 2   entry.lifecycle hist.open.personal demand chequing account    exit.lifecycle     entry.cei             <NA>      <NA>
# 3   entry.lifecycle  hist.open.personal demand savings account    exit.lifecycle     entry.cei             <NA>      <NA>
# 4 entry.transaction                    txn.no source available  exit.transaction     entry.cei             <NA>      <NA>
# 5      entry.branch                                exit.branch entry.transaction txn.in-branch exit.transaction entry.cei
x <- c("entry.cei", 
 "entry.lifecycle->hist.open.personal demand chequing account->exit.lifecycle->entry.cei", 
 "entry.lifecycle->hist.open.personal demand savings account->exit.lifecycle->entry.cei", 
 "entry.transaction->txn.no source available->exit.transaction->entry.cei", 
 "entry.branch->exit.branch->entry.transaction->txn.in-branch->exit.transaction->entry.cei")