[英]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.