2015-04-23 69 views
2

我需要对R中的数据集中的每个x个观察值(行)进行分组和标记。
我需要知道数据集中最后一组行的数目是否小于x观测值数据框中的数据组中的行和标签行R

例如: 如果我使用一个包含10个观察值和2个变量的数据集,并且我想按每3行进行分组。 我想添加一个新列,这样的数据集是这样的:

speed  dist  newcol 
     4  2   1 
     4  10   1 
     7  4   1 
     7  22   2 
     8  16   2 
     9  10   2 
     10  18   3 
     10  26   3 
     10  34   3 
     11  17   4 
+3

我不明白你想要什么,请给我们一些输入数据,你只是想要:'df $ group < - c(rep(1:3,each = 3),4)' – grrgrrbla

+0

@grrgrrbla,如果'data.frame'行数不能被“3”分割。一个正确的解决方案是'rep(1:ceiling(nrow(df)/ 3),每个= 3)[1:nrow(df)]' –

+0

我知道,这不是解决方案,但我没有输入数据甚至不明白他想要什么,所以我试图通过给出一个非常简单的解决方案来获得更多信息,并询问这是否是方向 – grrgrrbla

回答

1

假设你的数据是df你可以做

df$newcol = rep(1:ceiling(nrow(df)/3), each = 3)[1:nrow(df)] 
+1

是的!谢谢!虽然在最终分组中不到3的时候没有通知。你会知道如何让它回来吗? – user4824195

+0

它保持由'rep'函数形成的向量的第一个'nrow(df)'。 –

2
df$group <- rep(1:(nrow(df)/3), each = 3) 

这工作,如果行数是确切的倍数3.每三行将得到序列号的标签。

一个快速肮脏的方式来解决,不知道最后一组是如何不完整的简单检查的问题时nrow是模数由组大小划分依然存在:nrow(df) %% 3 #change the divisor to your group size