代码之家  ›  专栏  ›  技术社区  ›  rmahesh

是否基于选定字符拆分列?

r
  •  3
  • rmahesh  · 技术社区  · 7 年前

    我有一个包含许多列的数据框。对于其中一列(“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 回复  |  直到 7 年前
        1
  •  3
  •   akrun    7 年前

    我们得逃走

    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))
    
        2
  •  1
  •   Pierre Gramme    7 年前

    您可以查看一个很棒的数据操作包: tidyr

    然后:

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

    (注意转义的反斜杠)