2016-09-15 5 views
1

Ich habe einen Datenrahmen und möchte ein Leerzeichen an einer bestimmten Stelle einfügen. Hier ist ein Beispiel für die Daten:Einfügen eines Speicherplatzes an einer bestimmten Stelle in einer Zeichenfolge

0MHOCAN000006026421HOCAN000000392457HOCAN000005311227 
0FHOUSA000002272874HOUSA000002272874HOUSA000050206641 
0MHOUSA000002272874HOUSA000002076121HOUSA000014569699 

Und hier ist das, was ich (ein Leerzeichen vor jedem Buchstaben H) erhalten möchten:

0M HOCAN000006026421 HOCAN000000392457 HOCAN000005311227 
0F HOUSA000002272874 HOUSA000002272874 HOUSA000050206641 
0M HOUSA000002272874 HOUSA000002076121 HOUSA000014569699 
+2

Mit Blick auf die Antwort, die akzeptiert wurde, sollten Sie erwähnt haben, dass Sie die Daten aus einer Datei lesen. –

Antwort

2

können wir feste Breite verwenden lesen:

Basisfunktion read.fwf:

x1 <- read.fwf("temp.txt", 
       widths = c(2, 17, 17, 17), 
       col.names = paste0("myColName",1:4), 
       stringsAsFactors = FALSE) 
# check output 
str(x1) 
# 'data.frame': 3 obs. of 4 variables: 
# $ myColName1: chr "0M" "0F" "0M" 
# $ myColName2: chr "HOCAN000006026421" "HOUSA000002272874" "HOUSA000002272874" 
# $ myColName3: chr "HOCAN000000392457" "HOUSA000002272874" "HOUSA000002076121" 
# $ myColName4: chr "HOCAN000005311227" "HOUSA000050206641" "HOUSA000014569699" 
x1 
# myColName1  myColName2  myColName3  myColName4 
# 1   0M HOCAN000006026421 HOCAN000000392457 HOCAN000005311227 
# 2   0F HOUSA000002272874 HOUSA000002272874 HOUSA000050206641 
# 3   0M HOUSA000002272874 HOUSA000002076121 HOUSA000014569699 

Verwendung read_fwf von Paket:

library(readr) 

x2 <- read_fwf("temp.txt", 
       fwf_widths(c(2, 17, 17, 17), 
          col_names = paste0("myColName",1:4))) 
# check output 
str(x2) 
# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 3 obs. of 4 variables: 
# $ myColName1: chr "0M" "0F" "0M" 
# $ myColName2: chr "HOCAN000006026421" "HOUSA000002272874" "HOUSA000002272874" 
# $ myColName3: chr "HOCAN000000392457" "HOUSA000002272874" "HOUSA000002076121" 
# $ myColName4: chr "HOCAN000005311227" "HOUSA000050206641" "HOUSA000014569699" 
# - attr(*, "spec")=List of 2 
# ..$ cols :List of 4 
# .. ..$ myColName1: list() 
# .. .. ..- attr(*, "class")= chr "collector_character" "collector" 
# .. ..$ myColName2: list() 
# .. .. ..- attr(*, "class")= chr "collector_character" "collector" 
# .. ..$ myColName3: list() 
# .. .. ..- attr(*, "class")= chr "collector_character" "collector" 
# .. ..$ myColName4: list() 
# .. .. ..- attr(*, "class")= chr "collector_character" "collector" 
# ..$ default: list() 
# .. ..- attr(*, "class")= chr "collector_guess" "collector" 
# ..- attr(*, "class")= chr "col_spec" 
x2 
# # A tibble: 3 × 4 
# myColName1  myColName2  myColName3  myColName4 
#  <chr>    <chr>    <chr>    <chr> 
# 1   0M HOCAN000006026421 HOCAN000000392457 HOCAN000005311227 
# 2   0F HOUSA000002272874 HOUSA000002272874 HOUSA000050206641 
# 3   0M HOUSA000002272874 HOUSA000002076121 HOUSA000014569699 

sollten Diese Lösungen arbeiten, auch wenn IDs nicht anfangen mit dem Buchstaben H und IDs können mehr als eine H enthalten.

5

Sie eine gsub mit einem festen String Ersatz verwenden können:

x <- c("0MHOCAN000006026421HOCAN000000392457HOCAN000005311227", 
"0FHOUSA000002272874HOUSA000002272874HOUSA000050206641", 
"0MHOUSA000002272874HOUSA000002076121HOUSA000014569699") 
gsub("H", " H", x, fixed=TRUE) 

Siehe R demo

Ausgang:

[1] "0M HOCAN000006026421 HOCAN000000392457 HOCAN000005311227" 
[2] "0F HOUSA000002272874 HOUSA000002272874 HOUSA000050206641" 
[3] "0M HOUSA000002272874 HOUSA000002076121 HOUSA000014569699" 

Wenn Ihr Datenrahmen df Spaltenname col1 ist, können Sie

df$col1 = gsub("H", " H", df$col1, fixed=TRUE) 
Verwandte Themen