2016-04-19 6 views
0

Für den Datensatz in R, mtcars, ich versuche, eine Teilmenge des Datenrahmens, aus den Spalten 1, 2 und 8 und 9. Ich möchte Spalten indizieren 8 und 9, so kann ich in meiner Funktion auf den einen oder anderen zurückgreifen, um eine bestimmte Ausgabe zu erhalten.Spalte Subsets und Indizes in R in einen Datenrahmen zu ändern

so habe ich

highestmpg <- function(cyl, type) { 

    type <- mtcars[, c(8, 9)] 
    df <- mtcars[, c(1, 2, type)] 

ich einen Fehler habe diese weit in die Funktion

Fehler in .subset (x, j): ungültige Index Typ 'Liste'

Ich verstehe diesen Fehler nicht, kann mir jemand helfen, herauszufinden, wie man diesen Fehler umgehen kann?

Mein Ziel ist es, einen Datenrahmen zu bilden, in der ich später Eingang Spalte 2 (cyl) entweder Spalte 8 oder 9-Wert (0 oder 1), um einen Wert für Spalte 1 (MPG) zu erhalten

ich mag mtcars von Zyl Rang, dann nach Typ, um mit einem organisierten Datenrahmen, um am Ende für mpg, später, um die höchste mpg zu finden, die am Eingang je

ranking <- mtcars[order(cyl, type, mpg)] 

ich entschuldige mich in Voraus, ich bin immer noch ein Anfänger in R, und ich bin vielleicht nicht in der ganzen Terminologie korrekt und ich würde mich über jeden Rat freuen!

Antwort

0

Wenn ich den Code ausführen, den Sie angegeben haben, bekomme ich nicht den Fehler, den Sie melden, aber einen anderen. Ich werde annehmen, dass Sie eine Klammer verpasst, wenn Sie die zweite Zeile eingeben, damit es sollte lauten:

type <- mtcars[, c(8, 9)] 
df <- mtcars[, c(1, 2, type)] 

Die Fehlermeldung besagt, dass Sie mit einer Liste der Teilmenge versuchen. Dies ist auf type ist ein data.frame (die in R tatsächlich eine Liste ist), so dass Sie die Listenelemente 1 und 2 dieser Liste vorangestellt wird und das Ergebnis erhalten:

> c(1, 2, type) 
[[1]] 
[1] 1 

[[2]] 
[1] 2 

$vs 
[1] 0 0 1 1 0 1 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 0 1 0 0 0 1 

$am 
[1] 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 

Es ist nicht sinnvoll ist dies für subsetting zu verwenden und du hast es wahrscheinlich nicht beabsichtigt. Ich verstehe nicht ganz, was Sie zu tun versuchen, also ist dies die einzige Hilfe, die ich Ihnen jetzt anbieten kann.

0

Der Fehler, den Sie bekommen, liegt daran, dass Sie einen data.frame type an eine Funktion übergeben (c), die eine Liste eines einzelnen Typs erwartet. Diese

mtcars[, c(1, 2, 8)] 

oder diese

mtcars[, c("mpg", "cyl", "am")] 

arbeiten.

Es ist auch unklar, ob Sie hier eine Funktion benötigen. Dies sollte Ihnen geben, was Sie wollen (Ranking der Autos nach Zyl und entweder vs oder am)

mtcars[order(mtcars$cyl, mtcars$vs), ] 
mtcars[order(mtcars$cyl, mtcars$am), ] 
Verwandte Themen