根据选择字符拆分列?

时间:2018-06-18 14:23:55

标签: r

我有一个包含许多列的数据框。对于其中一列('cols'),它大致具有以下结构:

'X \ Y \ Z'

有些行是'x \ y \ z'而其他行是'x \ y'。我只对该行的'y'部分感兴趣。

我一直在查看有类似问题的人在stackoverflow上的各种帖子,但我找不到有效的解决方案。我得到的最接近的是(导致错误):

x = strsplit(df['cols'], "\")

我有一种感觉,我可能没有正确使用包装。任何帮助都会很棒!

编辑:包含的样本结构和预期输出

目前的结构:

     cols
'test\foo\bar'
'test\foo'
'test\bar'
'test\foo\foo'

预期产出:

 cols
'foo'
'foo'
'bar'
'foo'

2 个答案:

答案 0 :(得分:3)

我们需要逃避

df$cols <- sapply(strsplit(df$cols, "\\\\"), `[`, 2)
df$cols
#[1] "foo" "foo" "bar" "foo"

sub

sub("^\\w+.(\\w+).*", "\\1", df$cols)
#[1] "foo" "foo" "bar" "foo"

数据

df <- structure(list(cols = c("test\\foo\\bar", "test\\foo", "test\\bar", 
"test\\foo\\foo")), .Names = "cols", class = "data.frame", row.names = c(NA, 
-4L))

答案 1 :(得分:1)

您可以查看一个用于数据操作的优秀软件包:tidyr

然后:

df = tidyr::separate(df, col = cols, into = c("x", "y", "z"), sep="\\\\")

(注意逃脱的反斜杠)