分隔数据框中的箭头分隔值,以使用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")