2016-09-19 62 views
0

我有以下形式的csv文件:对于分区的数据值在一列中的R

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

现在,我想分区R.此数据由2年递增我试着使用分裂功能但不确定如何定义2年的增量。

预期的输出应该是这样的:

$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 

基本上,2年分区的数据。

+0

灿您将显示预期的输出,并显示输入数据的一些行,因为它不清楚。 – akrun

+0

增加了预期的输出 – anu

回答

1

您可以试用split并结合cut

这将split你的数据帧在第二年seq uence从min imum的year开始到max imum。

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

假设您的数据框为df。每年由2

2

鸿沟,然后地板就模拟2年的时间:

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)) 

如果你关心的每个子集命名,然后将其调整到这一点:

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

我想另一个选择是'split(df,df $ year%/%2)' – akrun

相关问题