分隔两列的类似分隔符

时间:2016-02-26 12:56:20

标签: r split delimiter

我有一个带有两列的数据,其中分隔符分隔每个单元格中的条目。 示例数据如下所示:

Proxy

所以我希望这看起来像这样:

A|B|C    20|30|40
C|D      20|40
v|M|R|Y  29|23|24|23
C        20

我可以使用A 20 B 30 C 40 C 20 D 40 V 29 M 23 R 24 Y 23 C 20 根据分隔符分隔一列,但我很难将字母表映射到第二列中的相应数字。 帮助我找到一个方法

2 个答案:

答案 0 :(得分:4)

仅使用基础R:

# re-create your input data
Input <- 
read.table(text=
'A|B|C 20|30|40
C|D 20|40
v|M|R|Y 29|23|24|23
C 20',stringsAsFactors=FALSE,col.names=c('Col1','Col2'))

# let's split...
DF2 <- 
data.frame(
Col1=unlist(strsplit(Input$Col1,split='|',fixed=TRUE)),
Col2=unlist(strsplit(Input$Col2,split='|',fixed=TRUE)))

> DF2
   Col1 Col2
1     A   20
2     B   30
3     C   40
4     C   20
5     D   40
6     v   29
7     M   23
8     R   24
9     Y   23
10    C   20

答案 1 :(得分:3)

我们可以使用cSplit。它也适用于多列。使用列索引或列的名称。

library(splitstackshape)
cSplit(df1, 1:2, "|", "long")
#    V1 V2
# 1:  A 20
# 2:  B 30
# 3:  C 40
# 4:  C 20
# 5:  D 40
# 6:  v 29
# 7:  M 23
# 8:  R 24
# 9:  Y 23
#10:  C 20

数据

df1 <- structure(list(V1 = c("A|B|C", "C|D", "v|M|R|Y", 
"C"), V2 = c("20|30|40", 
"20|40", "29|23|24|23", "20")), .Names = c("V1", "V2"), 
class = "data.frame", row.names = c(NA, -4L))