簡體   English   中英

R:Gsub有條件地刪除空格

[英]R: Gsub to conditionally remove spaces

對於這個問題,我有以下示例,它是一個以兩個字符串作為行的矩陣:

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" |
+--------------------------------------+

我們可以使用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

使用示例數據,只需執行簡單的'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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM