【问题标题】:R: Gsub to conditionally remove spacesR:Gsub 有条件地删除空格
【发布时间】:2016-01-03 23:08:50
【问题描述】:

对于这个问题,我有以下示例,它是一个以两个字符串为行的矩阵:

mylist <- rbind("1  Henry Buchanon  45  60  70", "2  Julie  Tiscani  80  50  70")

我希望将这些数据放在表格中,因此最直接的方法是:

mytable <- read.table(textConnection(mylist)) 

生成下表有一个问题(对我来说)——名字和姓氏在两个单独的列中(V2 和 V3)。我更喜欢第二个表格,其中名字和姓氏在同一列 (V2)。

+------------------------------+
|   V1    V2       V3 V4 V5 V6 |
+------------------------------+
| 1  1 Henry Buchanon 45 60 70 |
| 2  2 Julie  Tiscani 80 50 70 |
+------------------------------+

+------------------------------+
|   V1             V2 V3 V4 V5 |
+------------------------------+
| 1  1 HenryBuchanon 45 60 70  |
| 2  2  JulieTiscani 80 50 70  |
+------------------------------+

是否可以只省略名字和姓氏之间的空格(例如“Henry”和“Buchanon”之间的空格并保持其他空格不变?下面的代码存在两个问题:1)代码删除了字母搜索条件和 2) 它仅适用于单间距。

gsub("([A-z])[[:space:]]([A-z])", "", mylist)

+--------------------------------------+
| [1,] "1  Henruchanon  45  60  70"    |
+--------------------------------------+
| [2,] "2  Julie  Tiscani  80  50  70" |
+--------------------------------------+

【问题讨论】:

  • 为什么不只是mytable$Name &lt;- paste(mytable$V2,mytable$V3)
  • 试试gsub("(?&lt;=[A-z])[[:space:]]+(?=[A-z])", "", mylist,perl=TRUE)

标签: r text gsub spacing


【解决方案1】:

使用您的示例数据,一个简单的‘paste’就可以做到:

mytable$V1 <- paste(mytable$V2,mytable$V3); mytable <- mytable[,-c(2:3)]
mytable
> mytable
              V1 V4 V5 V6
1 Henry Buchanon 45 60 70
2  Julie Tiscani 80 50 70

【讨论】:

    【解决方案2】:

    我们可以使用gsub 创建引号将名字/姓氏与其他名字分开,然后使用read.table。这将避免名字和姓氏之间没有空格。

    m1 <- gsub('(?<=\\d\\s)\\s*(?=[A-Z])|(?<=[a-z])\\s*(?=\\s\\d)',
                             "'", mylist, perl=TRUE)
    read.table(text=m1, sep='', header=FALSE)
    #  V1             V2 V3 V4 V5
    #1  1 Henry Buchanon 45 60 70
    #2  2 Julie  Tiscani 80 50 70
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-28
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      相关资源
      最近更新 更多