2016-09-22 8 views
0

Ich habe einen Datenrahmen, die im Grunde hat seinen Kopf ein paar Mal recycelt, so sieht es wie folgt aus:Entfernen Zeichendaten aus numerischen Datenrahmen in R

var1 var2 var3 var4 
    1  1  1  'ch' 
    1  1  1  'ch' 
    1  1  1  'ch' 
var1 var2 var3 var4 
    1  1  1  'ch' 
    1  1  1  'ch' 
    1  1  1  'ch' 
var1 var2 var3 var4 

Die meisten der Variablen haben numerische Werte; einige haben jedoch Charakter - also wird die Umwandlung von ganzem df in numerisch mir nicht helfen. Ich habe mich gefragt, wie ich den Datenrahmen unterteilen, um den wieder erscheinenden Header zu entfernen? So, endlich würde ich dieses:

var1 var2 var3 var4 
    1  1  1  'ch' 
    1  1  1  'ch' 
    1  1  1  'ch' 
    1  1  1  'ch' 
    1  1  1  'ch' 
    1  1  1  'ch' 
+1

'df [df var4 $! = 'Var4']'? – Sotos

+1

und dann 'df [] <- lapply (df, type.convert)' – Roland

+1

Auch, 'df [! RowSums (df == Namen (df)),]' –

Antwort

2

die zusätzlichen Header Nachdem alle Ihre Daten in Faktoren eingeschaltet haben (oder Zeichen, wenn Sie stringsAsFactors=FALSE verwendet):

dd <- read.table(text="var1 var2 var3 var4 
    1  1  1  'ch' 
    1  1  1  'ch' 
    1  1  1  'ch' 
var1 var2 var3 var4 
    1  1  1  'ch' 
    1  1  1  'ch' 
    1  1  1  'ch' 
var1 var2 var3 var4") 

Wandeln Sie alle aber letzte Spalte numerisch (ignorieren Warnungen):

dd[,1:3] <- lapply(dd[,1:3], 
        function(x) as.numeric(as.character(x))) 

wegzuwerfen Zeilen, in denen die ersten drei Spalten sind NA:

dd <- dd[apply(dd[,1:3],1,function(x)!all(is.na(x))),] 
3

Sie dieses versuchen:

df[,1:3] <- sapply(df[,1:3], function(x) as.integer(as.character(x))) 
df <- df[complete.cases(df),] 
+0

gut, aber wird Probleme verursachen, wenn es andere gibt 'NA'-Werte im Datensatz ... –

0

Wie wäre es damit:

rpts <- unique(as.vector(sapply(1:ncol(d), function(i) which(names(d)[i]==d[,i])))) 
d <- d[-1*rpts,] 

Die erste Zeile extrahiert die Zeilen, in denen die jeweiligen Spaltennamen für alle Spalten erschienen ist (dh names(d)). Zweite Zeile Konten für das Löschen dieser extrahierten Zeilen (d. H. rpts).

Daten

d <- structure(list(var1 = structure(c(1L, 1L, 1L, 2L, 1L, 1L, 1L, 
2L), .Label = c("1", "var1"), class = "factor"), var2 = structure(c(1L, 
1L, 1L, 2L, 1L, 1L, 1L, 2L), .Label = c("1", "var2"), class = "factor"), 
    var3 = structure(c(1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L), .Label = c("1", 
    "var3"), class = "factor"), var4 = structure(c(1L, 1L, 1L, 
    2L, 1L, 1L, 1L, 2L), .Label = c("ch", "var4"), class = "factor")), .Names = c("var1", 
"var2", "var3", "var4"), class = "data.frame", row.names = c(NA, 
-8L)) 
Verwandte Themen