2017-10-09 6 views
1

Für den folgenden Vektor, würde ich nur die ersten beiden Ziffern der jede ganze Zahl zu halten:R: Extrahieren ersten zwei Ziffern von verschachtelten Liste Elemente

a <- c('1234 2345 345 234', '323 55432 443', '43 23345 321') 

ich versucht haben, dies zu tun, indem sie den Vektor in Umwandeln eine verschachtelte Liste strsplit mit und substr in die Liste dann Anwendung:

a <- strsplit(a, ' ') 
a <- substr(a, start = 1, stop = 2) 

dies scheint jedoch nur zu extrahieren eh Anfang des verketteten Befehl:

a 
[1] "c(" "c(" "c(" 

Idealerweise würde ich in der Lage, den Vektor in das folgende Formular zu zwingen:

[[1]] 
[1] "12" "23" "34" "23" 

[[2]] 
[1] "32" "55" "44" 

[[3]] 
[1] "43" "23" "32" 

Antwort

3

Wie wäre es

lapply(strsplit(a, " "), substr, 1, 2) 

dies ausdrücklich tut ein lapply über die Ergebnisse der strsplit. Dies liegt daran, dass substr() versucht, Ihre Liste zuerst zu einem Zeichenvektor zu zwingen (es erwartet keine Liste als ersten Parameter). Sie können sehen, was es an schaut, wenn Sie tun

as.character(strsplit(a, ' ')) 
# [1] "c(\"1234\", \"2345\", \"345\", \"234\")" "c(\"323\", \"55432\", \"443\")"   
# [3] "c(\"43\", \"23345\", \"321\")" 
+0

Das funktionierte fantastisch die ersten beiden Ziffern von einer Wortgrenze extrahieren - vielen Dank! Danke, dass Sie sich die Zeit genommen haben zu erklären, wie ich 'substr() 'missverstanden habe. – kathystehl

0

Wir können auch

library(stringr) 
str_extract_all(a, "\\b\\d{2}") 
#[[1]] 
#[1] "12" "23" "34" "23" 

#[[2]] 
#[1] "32" "55" "44" 

#[[3]] 
#[1] "43" "23" "32" 
Verwandte Themen