2017-09-19 74 views
0

我有4列的数据框,我需要在每个I后添加空格,以便值分割。整个数据帧有8064行。谢谢。在R列中的每个字母后面添加空格

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 

回答

3

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

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

谢谢你对我的数据有效。不过,我需要一些理由来运行它2倍,因为在第一次代码不分割更长的代码,如I22I34I8I3I59你有任何建议,所以一切都被拆分一行代码?谢谢。 – ThomasJohnson

+0

@ThomasJohnson您可以尝试akrun的解决方案。它会正常工作(我现在没有时间用你的新要求修改我的答案 - 尽快完成) – Sotos

3

我们可以使用gsub用正则表达式lookarounds

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))) 
相关问题