我试图通过从特定列中具有相同值的每组行中删除除一行之外的所有行来折叠数据框.换句话说,每组的第一行.
例如,我想转换它
> d = data.frame(x=c(1,1,2,4),y=c(10,11,12,13),z=c(20,19,18,17))
> d
x y z
1 1 10 20
2 1 11 19
3 2 12 18
4 4 13 17
Run Code Online (Sandbox Code Playgroud)
进入:
x y z
1 1 11 19
2 2 12 18
3 4 13 17
Run Code Online (Sandbox Code Playgroud)
我目前正在使用聚合来执行此操作,但是使用更多数据时性能是不可接受的:
> d.ordered = d[order(-d$y),]
> aggregate(d.ordered,by=list(key=d.ordered$x),FUN=function(x){x[1]})
Run Code Online (Sandbox Code Playgroud)
我尝试使用与此处相同的函数参数进行split/unsplit,但是unsplit抱怨重复的行号.
有可能吗?是否有一个R idiom将rle的长度向量转换为开始每次运行的行的索引,然后我可以用它来从数据帧中取出这些行?
我导入的数据描述了在不同位置进行的数值测量,以获得或多或少均匀分布的时间戳.有时这种"均匀分布"并不是真的,我必须丢弃一些值,只要每个位置的每个时间戳都有一个值,那么哪个值并不重要.
我对数据做了什么?我将它添加到resultdata.frame.我有一个timestamp列和timestamp列中的值,它们肯定是根据的间隔均匀分布的step.
timestamps <- ceiling(as.numeric((timestamps-epoch)*24*60/step))*step*60 + epoch
result[result$timestamp %in% timestamps, columnName] <- values
Run Code Online (Sandbox Code Playgroud)
当我的时间戳落在同一时间步时,这不起作用.这是一个例子:
> data.frame(ts=timestamps, v=values)
ts v
1 2009-09-30 10:00:00 -2.081609
2 2009-09-30 10:04:18 -2.079778
3 2009-09-30 10:07:47 -2.113531
4 2009-09-30 10:09:01 -2.124716
5 2009-09-30 10:15:00 -2.102117
6 2009-09-30 10:27:56 -2.093542
7 2009-09-30 10:30:00 -2.092626
8 2009-09-30 10:45:00 -2.086339
9 2009-09-30 11:00:00 -2.080144
> data.frame(ts=ceiling(as.numeric((timestamps-epoch)*24*60/step))*step*60+epoch,
+ v=values)
ts v
1 2009-09-30 10:00:00 -2.081609
2 2009-09-30 10:15:00 -2.079778
3 2009-09-30 10:15:00 -2.113531
4 …Run Code Online (Sandbox Code Playgroud) 我试图隔离数据框中具有共同值的条目:请参阅下面的内容以重建我的df的一部分:
Stand<-c("MY","MY","MY","MY","MY")
Plot<-c(12,12,12,12,12)
StumpNumber<-c(1,2,3,3,7)
TreeNumber<-c(1,2,3,4,8)
sample<-data.frame(Stand,Plot,StumpNumber,TreeNumber)
sample
Run Code Online (Sandbox Code Playgroud)
并获得一个输出,告诉我哪些条目具有共同的值.换句话说,为了给定的Stand,Plot,StumpNumber组合快速隔离存在多个TreeNumber(或多于一行)的情况.在示例代码中,StumpNumber 3具有TreeNumber 3和TreeNumber 4.
我对duplicated()的理解是可以找到在一列中出现重复值的实例 - 我该怎么做才能找到常见的列组合出现的情况?
谢谢.