2017-07-26 3 views
0

Ich habe eine Reihe von Daten, wo einige Elemente "<" vorangestellt sind und ich "<" entfernen muss, damit ich einige Datenanalyse durchführen kann. Die Daten werden in einer TXT-Datei gespeichert und ich bringe sie mit read.table in R. Im Folgenden sehen Sie ein Beispiel für die Textdatei.Entfernen eines Zeichens von Elementen in einem Datenrahmen

Background: 18 <10 27 22 <3 

Site: 30 44 23 <16 13 

I verwendet x=read.file einen Datenrahmen zu machen, dann versucht gsub("<","",x) die "<" und das Ergebnis ist etwas völlig unerwartet, zumindest für mich zu entfernen. Das ist, was ich als Ergebnis bekomme.

[1] "1:2"  "c(18, 30)" "1:2"  "c(27, 23)" "c(2, 1)" "1:2" 

Ich habe keine Ahnung, was das bedeutet oder warum es passiert. Ich würde mich sehr über die Erklärung dessen, was hier vor sich geht, und darüber, wie ich mein Ziel erreichen sollte, freuen.

+0

'gsub' funktioniert nicht auf einem' data.frame' direkt - 'x [] <- lapply (x, gsub, pattern =" <", ersatz =" ")' Ich vermute, könnte sein was du willst. – thelatemail

Antwort

0
df <- read.table(header = TRUE, text = "Background Site 
       18 30 
       <10 44 
       27 23 
       22 <16 
       <3 13", stringsAsFactors = FALSE) 

können Sie mutate_at verwenden und die gsub Funktion auf die Variablen (d Background und Site) anzuwenden, die Sie den vorhergehenden < Zeichen entfernen möchten.

library(dplyr) 
df %>% mutate_at(vars(Background, Site), 
       funs(as.numeric(gsub("^<", "", .)))) 

Die Ausgabe lautet:

Background Site 
1   18 30 
2   10 44 
3   27 23 
4   22 16 
5   3 13 
+0

Scheint, als ob die Daten mehr wie 'x <- read.table (text =" 18 <10 27 22 <3 \ n30 44 23 <16 13 ")' sind, nur nach der Ausgabe ihres Versuchs zu urteilen. –

0

die Datei lesen mit readLines, führen Sie die gsub und dann wieder lesen es mit read.table. Keine Pakete werden verwendet:

read.table(text = gsub("<", "", readLines("myfile")), as.is = TRUE) 

Wenn die Daten nicht aus einer Datei stammt, sondern ist bereits in einem Datenrahmen DF dann eine clean Funktion definieren, die eine Spalte von DF reinigt und es auf jede numerische Spalte:

clean <- function(x) as.numeric(gsub(">", "", x)) 
DF[-1] <- lapply(DF[-1], clean) 
Verwandte Themen