2012-12-22 10 views
6

Mam wektor danych, similified wersja jest poniżej:Konwersja nic, że nie jest to numer puste

x <- c("1234123xcv?","12341534xxx.","hello","goodbye") 

Co chciałbym zrobić, to mieć zwróci następujący:

"1234123" "12341534" "" "" 

wiem, że mogę zrobić coś takiego, gdzie ręcznie podać każdą górna/dolna literami i kilku znaków specjalnych, że jestem świadomy:

grep("[A-Za-z\\?\\.]",x,value=TRUE) 

Ale nie wiem, co "jeszcze" jest w polu, które niekoniecznie jest liczbą. (i nie mogę przeglądać go ręcznie, ponieważ jest zbyt duży)

Mając to na uwadze, moje pytanie brzmi: czy istnieje sposób na określenie, że TYLKO chcesz zwracać numery w gsub()?

+0

Cyfry lub cyfry? "-1" to liczba, tak jak "3.14", tak jak "1.2E07". – Spacedman

+0

W moim szczególnym przypadku to tylko cyfry. Nie wierzę (mam) żadnych liczb w moich danych, które są sformatowane w ten sposób. Podążanie bardzo podobne do wzorca w powyższym przykładzie. –

Odpowiedz

11
gsub("\\D","",x) # yada yada yada 
3

Trzeba coś takiego:

[^0-9]* 

To pasuje do niczego, że nie jest to cyfra, nie ma potrzeby, aby określić, który znak.

5

Wewnątrz nawiasów, ^ oznacza "nie". Tak, to mówi zastąpić cokolwiek nie jest liczbą z ""

> gsub("[^0-9]", "", x) 
[1] "1234123" "12341534" ""   "" 
4
gsub("[^[:digit:]]", "", x) #...... 
0

Można użyć [\ d]. zwróci tylko liczby.

+1

Er ,,,,, to jest R. –

+0

1. [] nie są konieczne, gdy masz jeden element (ale co z nim zrobić?). 2. \ musi być zmieniony. –

2

by powiedzieć

gsub("[^0-9]+", "", x) 

[^ 0-9] zastąpi tylko jeden znak na raz i^[0-9] + jeden lub więcej, i które będą się szybciej.

+0

Fałsz. Popatrz na wyjście do mojej odpowiedzi. Mówi, że zastąp wszystko, co nie jest liczbą, znakiem "" ". '+' Jest niepotrzebne. – GSee

+0

@Gsee, nie sądzę, żeby mówił, że twoja wersja była zła. Tylko, że jego wersja zrobi mniej substytucji, zastępując kolejne niepuste cyfry. Dla tego samego wyniku. Mógł nawet argumentować, że może być szybszy w ten sposób ... W każdym razie umieszczenie tego w komentarzu byłoby w mojej opinii lepsze. – flodel

+0

@flodel. Słuszna uwaga. A w_g nie ma wystarczającej liczby przedstawicieli, aby opuścić komentarze. Będę edytować, aby móc anulować. – GSee

Powiązane problemy