我有一个包含许多列的数据框。对于其中一列('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'
答案 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="\\\\")
(注意逃脱的反斜杠)