【问题标题】:Adding space after every letter in R column在 R 列中的每个字母后添加空格
【发布时间】:2017-09-19 09:12:32
【问题描述】:

我有 4 列的数据框,我需要在每个 I 之后添加空格,以便值拆分。整个数据框有 8064 行。谢谢。

   CustomerI    V1    V2     V3
1  1231231231   l22I34  l22   l22
2  1231231233   l7      l7I19 l7
3  1231231234   l31     l7    l31
4  1231231235   l31l7   l7    l31l7
5  1231231236   l16     l22   l16
6  1231231237   l31     l31   l31

想要的结果

       CustomerI    V1       V2      V3
    1  1231231231   l22 I34  l22     l22
    2  1231231233   l7       l7 I19  l7
    3  1231231234   l31      l7      l31
    4  1231231235   l31 l7   l7      l31 l7
    5  1231231236   l16      l22     l16
    6  1231231237   l31      l31     l31

【问题讨论】:

    标签: r dataframe split tex


    【解决方案1】:

    一个想法是使用gsub 捕获两个组,然后在它们之间插入一个空格

    dd[-1] <- lapply(dd[-1], function(i) gsub('([A-Za-z][0-9]+)([A-Za-z][0-9]+)', '\\1 \\2', i))
    

    【讨论】:

    • 谢谢这对我的数据有效。但是由于某种原因,我需要将其运行 2 次,因为在第一次代码不会拆分较长的代码(例如 I22I34I8I3I59)之后,您有什么建议,所以所有内容都用一行代码拆分吗?谢谢。
    • @ThomasJohnson 你可以试试 akrun 的解决方案。它会正常工作(我现在没有时间根据您的新要求修改我的 ans - 会尽快完成)
    【解决方案2】:

    我们可以将gsub 与正则表达式环视一起使用

    df1[-1] <- lapply(df1[-1], function(x) 
                      gsub("(?<=[0-9])(?=[[:alpha:]])", " ", x, perl = TRUE))
    

    或使用捕获组

    df1[-1] <-  lapply(df1[-1], function(x) trimws(gsub("([[:alpha:]])", " \\1", x)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多