2016-08-08 6 views
2

Probe data.frame:Subset R data.frame von Index und Namen in einer Zeile

structure(list(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9)), .Names = c("a", "b", "c"), row.names = c(NA, -3L), class = "data.frame") 

Ausgang:

df 
# a b c 
# 1 1 4 7 
# 2 2 5 8 
# 3 3 6 9 

würde Ich mag die erste und dritte Spalte bekommen, aber ich möchte Teilmenge nach Name und auch nach Spaltenindex.

df[, "a"] 
# [1] 1 2 3 

df[, 3] 
# [1] 7 8 9 

df[, c("a", 3)] 
# Error in `[.data.frame`(df, , c("a", 3)) : undefined columns selected 

df[, c(match("a", names(df)), 3)] 
# a c 
# 1 1 7 
# 2 2 8 
# 3 3 9 

Gibt es Funktionen oder Pakete, die für saubere/einfache Syntax ermöglichen, wie im dritten Beispiel, während auch das Ergebnis des vierten Beispiels zu erreichen?

+2

ist glaube ich nicht so; 'match' ist was ich tun würde. – Frank

Antwort

1

Mabe verwenden dplyr?

Für interaktive Nutzung - das heißt, wenn Sie im Voraus wissen, der Name der Spalte, die Sie

library(dplyr) 
df %>% select(a, 3) 

auswählen möchten Wenn Sie den Namen der Spalte im Voraus nicht wissen, und wollen es passieren als eine Variable,

x <- names(df)[1] 
x 
[1] "a" 

df %>% select_(x, 3) 

so oder so die Ausgabe

# a c 
#1 1 7 
#2 2 8 
#3 3 9 
+0

Sieht gut aus; Ich werde herumspielen und mehr mit 'dplyr' lernen. Was meinst du mit "interaktiv" vs "dynamisch" verwenden? – tluh

+0

Überprüfen Sie mein Update. – Sumedh

Verwandte Themen