2016-08-04 12 views
0

Eingang (df)Dynamische Teilmenge ein Datenrahmen nach einem Muster colname in R

> df 
    gender age LIST_12 LIST_24 LIST_42 anxious happy nervous 
1  11 12  20  18  29  31  6  28 
2  35 25  26  23  9  34 13  21 
3  20 8  28  27  26  26 34  29 
4  24 35  10  11  18  25 26  3 
5  34 8  4  3  29  33 25  35 

Wunsch Ausgang (dfSubset)

Was wäre der beste Weg, um eine Teilmenge nur enthält Spalten zu erhalten nach LIST_ bis zum Ende. In diesem Fall möchte ich nur Teilmenge: ängstlich, fröhlich und nervös.

anxious happy nervous 
1  31  6  28 
2  34 13  21 
3  26 34  29 
4  25 26  3 
5  33 25  35 

Infos

Ich weiß, dass ich den folgenden Code ausführen, um nur die Spaltennamen mit dem Wort list_ Anfang der Teilmenge. Aber es ist nicht das, was ich suche ...

dfSubset = subset(x = df, select = grep("LIST_", names(df))) 
dfSubset 

Reproduzierbare Quelle

df <- structure(list(gender = c(11L, 35L, 20L, 24L, 34L), age = c(12L, 
25L, 8L, 35L, 8L), LIST_12 = c(20L, 26L, 28L, 10L, 4L), LIST_24 = c(18L, 
23L, 27L, 11L, 3L), LIST_42 = c(29L, 9L, 26L, 18L, 29L), anxious = c(31L, 
34L, 26L, 25L, 33L), happy = c(6L, 13L, 34L, 26L, 25L), nervous = c(28L, 
21L, 29L, 3L, 35L)), .Names = c("gender", "age", "LIST_12", "LIST_24", 
"LIST_42", "anxious", "happy", "nervous"), class = "data.frame", row.names = c(NA, 
-5L)) 
+0

Dank Richard, es funktioniert. Ich denke, es kann als Antwort akzeptiert werden. – S12000

Antwort

2

Man konnte feststellen, welche Spalte ist der letzte mit LIST beginnen, fügen Sie 1, und verwenden Sie diese Nummer Beginne eine Sequenz mit der Anzahl der Spalten.

df[(max(grep("^LIST", names(df))) + 1):ncol(df)] 
# anxious happy nervous 
# 1  31  6  28 
# 2  34 13  21 
# 3  26 34  29 
# 4  25 26  3 
# 5  33 25  35 
1

Wir verwenden select von dplyr

library(dplyr) 
df %>% 
    select(-matches("LIST|gender|age")) 
# anxious happy nervous 
#1  31  6  28 
#2  34 13  21 
#3  26 34  29 
#4  25 26  3 
#5  33 25  35 

Oder es könnte

df %>% 
    select((tail(matches("LIST"),1)+1):ncol(.)) 
+0

Ich denke es sind keine Spalten "nach einem Muster", seine Spalten neben Mustern – Batanichek

Verwandte Themen