我当然希望我明确地提出我的问题。所以,我试图在R中拆分某个df。这是一个很大的df,你可以看到下面的(缩短的)结构。
'data.frame':36993 obs。 n个变量:
$ klasse:num 1 1 1 1 1 1 1 1 1 1 ...
$ Start_time:chr“23:56:09.000”“23:56:09.000”“23:56:09.000”“23:56:09.000”...... $ Start_date:日期,格式:“2013-08-31”“2013-08-31”“2013-08-31”“2013-08-31”......
$ Milk:num 23.5 23.5 23.5 23.5 23.5 23.5 23.5 23.5 23.5 23.5 ...
$ duur_visit:num 1048 1048 1048 1048 1048 ......
现在,我要做的是将df拆分为df $ klasse中120个观测值的部分,其中包含39个不同长度的不同元素(例如1 = 1048个障碍物,2 = 239个障碍物等) 。此外,我想对这些组进行编号,每次为df $ klasse的每个新元素开始时为1。
我是一个菜鸟,我得到的最远的是发现我可能不得不使用包字符串,但是,我不确定。或者使用功能拆分,结合lapply。关于拆分和分组变量的主题有很多信息,我迷路了。如果有人可以帮助我,或者给我一个正确方向的推动,我将非常感激。
修改
@shadow的代码似乎是在正确的方向,但它在我的数据集中切出了“超出”120个观察结果。所以,我会尝试举例说明我的意思喜欢完成:
> within df
klasse grp Start_time
1 1 2013-08-31 02:54:35.000
1 1 2013-08-31 02:54:35.000
1 2 2013-08-31 02:54:35.000
1 2 2013-08-31 02:54:35.000
1 3 2013-08-31 02:54:35.000
2 1 2013-08-31 08:36:13.000
2 1 2013-08-31 08:36:13.000
2 2 2013-08-31 08:36:13.000
2 2 2013-08-31 08:36:13.000
2 3 2013-08-31 08:36:13.000
2 3 2013-08-31 08:36:13.000
2 4 2013-08-31 08:36:13.000
3 1 2013-09-01 15:01:40.000
3 1 2013-09-01 15:01:40.000
4 1 2013-09-01 23:51:54.000
当然我将它缩短为每组只有2个数字,否则它会变得很大,但实际上在组列中我希望组最大 120倍数字1,2和等等。我希望我清楚一点?
编辑2
是的,我今天早上又跑了,@ shadow的解决方案运行正常!我不知道昨天我做错了什么。
答案 0 :(得分:1)
这是执行此操作的split
,lapply
方法。如果df
是data.frame
,那么您可以使用拆分来获得list
data.frame
,按klasse分组:
lst <- split(df, df$klasse)
lst
然后使用lapply
进一步分割成您想要的观察数量:
nobs <- 120 # number of observations
l2 <- unlist(lapply(lst, function(x) {
x$grp <- rep(1:(nrow(x)/nobs+1), each=nobs)[1:nrow(x)] # grouping
split(x, x$grp) # splitting
}), recursive=FALSE)
如果我误解了您的问题,您可能希望使用可重现的示例更新它,您可以在其中明确地提供一些数据和预期输出。
答案 1 :(得分:0)
分割功能允许您创建基于klasse分隔的数据帧列表。
myKlasse <- split(dfrm, dfrm$klasse)
myKlasse <- lapply( myKlasse, function(df) {df$seqnum <- seq_along(rownames(df) )
df }
`seq_along将编号为数据帧的行。 (可能已经使用rownames编号,因为这是默认值,但这也会使它成为数据帧列。