2016-07-27 21 views
0

Ich möchte eine data.frame basierend auf einer Bedingung in r unterteilen. Ich habe folgende data.frame:Subsetting eines data.frame basierend auf einer Bedingung in R

df 

id  | message  |  cluster 
-------+-----------------+---------------- 
1  | Test A   | 1 
2  | Test B   | 1 
3  | Test C   | 3 
4  | Test D   | 1 
5  | Test E   | 2 
6  | Test F   | 2 
7  | Test G   | 3 
8  | Test H   | 3 
9  | Test I   | 1 
10  | Test K   | 2 
11  | Test L   | 4 
12  | Test M   | 4 

ich eine neue data.frame mit 4 (Anzahl der verschiedenen Cluster) Reihen bauen will. Ich wähle die erste message als Vertreter des Clusters. Deshalb möchte ich die bekommen folgende data.frame:

df2 

id  | message  |  cluster 
-------+-----------------+---------------- 
1  | Test A   | 1 
3  | Test C   | 3 
5  | Test E   | 2 
11  | Test L   | 4 
+0

'df2 <- do.call (rbind, von (df, df $ cluster, funktion (x) head (x, 1))) ' – JasonAizkalns

+0

Bitte geben Sie Ihre Beispieldaten in einem reproduzierbaren Format wie' dput' –

+0

oder 'df2 <- df [! duplicated (df $ cluster),] wird funktionieren. – lmo

Antwort

0

Holen Sie sich die Indizes der Zeilen, die Sie sammeln möchten:

indices <- !duplicated(df$cluster) 

verwenden, die den Datenrahmen der Teilmenge:

df2 <- df[indices, ] 
2

Als Alternative Ansatz, das dplyr Paket ist schön für diese Art von Dingen.

text <- "id  | message  |  cluster 
1  | Test A   | 1 
2  | Test B   | 1 
3  | Test C   | 3 
4  | Test D   | 1 
5  | Test E   | 2 
6  | Test F   | 2 
7  | Test G   | 3 
8  | Test H   | 3 
9  | Test I   | 1 
10  | Test K   | 2 
11  | Test L   | 4 
12  | Test M   | 4" 

library(readr) 
df <- read_delim(text, delim = "|", trim_ws=TRUE) 

library(dplyr) 
df2 <- 
    df %>% 
    group_by(cluster) %>% 
    summarize(message=first(message)) 

Und hier ist das Ergebnis:

> df2 
# A tibble: 4 x 2 
    cluster message 
    <int> <chr> 
1  1 Test A 
2  2 Test E 
3  3 Test C 
4  4 Test L 

(. Es könnte die Daten zu arrange nützlich sein, so dass "ersten" vorhersehbar ist)

Verwandte Themen