2016-09-19 1 views
0

Ich habe eine CSV-Datei in der folgenden Form:Partitionierung der Daten in Bezug auf Werte in einer Spalte in R

rec | year | ing 
----|------|----- 
1 | 2002 | a 
1 | 2002 | b 
1 | 2002 | c 
2 | 2002 | e 
. | . | . 
. | . | . 
4 | 2017 | a 

Nun, ich mag diese Daten partitionieren von 2-Jahres-Schritten in R. Ich habe versucht, mit Split-Funktion, aber nicht sicher, wie Inkrement von 2 Jahren zu definieren.

Erwartete Ausgabe sollte wie folgt aussehen:

$0 
rec | year | ing 
----|------|----- 
1 | 2002 | a 
1 | 2002 | b 
1 | 2002 | c 
2 | 2002 | e 
. | . | . 
. | . | . 
3 | 2003 | a 

$1 
rec | year | ing 
----|------|----- 
5 | 2004 | a 
5 | 2004 | b 
4 | 2004 | c 
4 | 2005 | e 
. | . | . 
. | . | . 
6 | 2005 | a 

Grundsätzlich Partitionierungsdaten von 2 Jahren.

+0

Can Sie zeigen die erwartete Ausgabe und auch einige Zeilen mit den Eingabedaten an, da sie nicht eindeutig sind. – akrun

+0

hinzugefügt erwartete Ausgabe – anu

Antwort

1

Sie können split in Kombination mit versuchen.

Dies wird Ihren Datenrahmen in 2 Jahren seq uss ab min imum von year zum max imum split.

split(df, cut(df$year, seq(min(df$year), max(df$year), 2), include.lowest=TRUE)) 

Angenommen, Ihr Datenrahmen ist df.

2

Dividieren jedes Jahr um 2, dann Etage eines 2-Jahres-Zeitraum zu simulieren:

df <- read.table(header=TRUE,sep="|",text=" 
rec|year|ing 
1|2002|a 
1|2002|b 
1|2002|c 
2|2002|e 
3|2003|a 
4|2004|c 
4|2004|e 
5|2004|a 
5|2004|b 
6|2005|a 
4|2017|a 
4|2003|a 
") 

split(df,floor(df$year/2)) 

Wenn Sie sich interessieren, was jeder Teilmenge genannt wird, dann zwicken sie dies:

split(df,floor(df$year/2)-min(df$year)/2) 
+1

Ich denke, eine andere Option ist 'split (df, df $ Jahr% /% 2)' – akrun

Verwandte Themen