Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何从数据帧中删除部分重复项?_R - Fatal编程技术网

R 如何从数据帧中删除部分重复项?

R 如何从数据帧中删除部分重复项?,r,R,我导入的数据描述了在不同位置进行的数字测量,以获得大致均匀分布的时间戳。有时这种“均匀分布”不是真的,我必须丢弃一些值,哪一个值并不重要,只要每个位置的每个时间戳有一个值 我如何处理这些数据?我将其添加到结果data.frame。这里有一个timestamp列和timestamp列中的值,它们肯定是根据步骤均匀分布的 timestamps <- ceiling(as.numeric((timestamps-epoch)*24*60/step))*step*60 + epoch result

我导入的数据描述了在不同位置进行的数字测量,以获得大致均匀分布的时间戳。有时这种“均匀分布”不是真的,我必须丢弃一些值,哪一个值并不重要,只要每个位置的每个时间戳有一个值

我如何处理这些数据?我将其添加到
结果
data.frame。这里有一个
timestamp
列和timestamp列中的值,它们肯定是根据
步骤均匀分布的

timestamps <- ceiling(as.numeric((timestamps-epoch)*24*60/step))*step*60 + epoch
result[result$timestamp %in% timestamps, columnName] <- values
在Python中,我会(mis)使用字典来实现我所需要的:

dict(zip(timestamps, values)).items()
返回第一个坐标唯一的对的列表


在R中,我不知道如何以一种紧凑而高效的方式进行此操作。

我将使用
子集
重复
相结合来过滤第二个数据帧中的非唯一时间戳:

R> df_ <- read.table(textConnection('
                     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 "2009-09-30 10:15:00" -2.124716
5 "2009-09-30 10:15:00" -2.102117
6 "2009-09-30 10:30:00" -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
'), as.is=TRUE, header=TRUE)

R> subset(df_, !duplicated(ts))
                   ts      v
1 2009-09-30 10:00:00 -2.082
2 2009-09-30 10:15:00 -2.080
6 2009-09-30 10:30:00 -2.094
8 2009-09-30 10:45:00 -2.086
9 2009-09-30 11:00:00 -2.080

我认为您正在研究时间索引对象的数据结构,而不是字典。对于前者,请查看提供更好的time pased子集设置的和包:

R> library(xts)
R> X <- xts(data.frame(val=rnorm(10)), \
            order.by=Sys.time() + sort(runif(10,10,300)))
R> X
                        val
2009-11-20 07:06:17 -1.5564
2009-11-20 07:06:40 -0.2960
2009-11-20 07:07:50 -0.4123
2009-11-20 07:08:18 -1.5574
2009-11-20 07:08:45 -1.8846
2009-11-20 07:09:47  0.4550
2009-11-20 07:09:57  0.9598
2009-11-20 07:10:11  1.0018
2009-11-20 07:10:12  1.0747
2009-11-20 07:10:58  0.7062
R> X["2009-11-20 07:08::2009-11-20 07:09"]
                        val
2009-11-20 07:08:18 -1.5574
2009-11-20 07:08:45 -1.8846
2009-11-20 07:09:47  0.4550
2009-11-20 07:09:57  0.9598
R> 
R>库(xts)
R> X X
瓦尔
2009-11-20 07:06:17 -1.5564
2009-11-20 07:06:40 -0.2960
2009-11-20 07:07:50 -0.4123
2009-11-20 07:08:18 -1.5574
2009-11-20 07:08:45 -1.8846
2009-11-20 07:09:47  0.4550
2009-11-20 07:09:57  0.9598
2009-11-20 07:10:11  1.0018
2009-11-20 07:10:12  1.0747
2009-11-20 07:10:58  0.7062
R> X[“2009-11-20 07:08::2009-11-20 07:09”]
瓦尔
2009-11-20 07:08:18 -1.5574
2009-11-20 07:08:45 -1.8846
2009-11-20 07:09:47  0.4550
2009-11-20 07:09:57  0.9598
R>

X
对象是按时间顺序排序的——请确保它是POSIXct类型,以便您可能需要首先解析日期。然后我们就可以索引“在给定的日期从7:08到7:09”

这很有效,谢谢!但你是如何在文档中找到它的?即使现在我知道了答案,我也没能猜到该往哪里看!另外:假设我想选择哪个值(比如最后一个值),子集是否提供了可能性?一个附加值:“子集”也可以用于从向量中删除重复项?如果是这样的话,怎么做?我实际上只是想删除重复项。我对时间戳做的不多。感谢您向我指出此库,但我认为我不喜欢添加依赖项。请查看unique()和duplicated(),并仍然使用POSIXct类型。关于POSIXct类型,有助于理解Dirk Eddelbuettel建议使用它的原因。
aggregate(df_$v, by=list(df_$ts), function(x) x[1])  # first value
aggregate(df_$v, by=list(df_$ts), function(x) tail(x, n=1))  # last value
aggregate(df_$v, by=list(df_$ts), function(x) max(x))  # max value
R> library(xts)
R> X <- xts(data.frame(val=rnorm(10)), \
            order.by=Sys.time() + sort(runif(10,10,300)))
R> X
                        val
2009-11-20 07:06:17 -1.5564
2009-11-20 07:06:40 -0.2960
2009-11-20 07:07:50 -0.4123
2009-11-20 07:08:18 -1.5574
2009-11-20 07:08:45 -1.8846
2009-11-20 07:09:47  0.4550
2009-11-20 07:09:57  0.9598
2009-11-20 07:10:11  1.0018
2009-11-20 07:10:12  1.0747
2009-11-20 07:10:58  0.7062
R> X["2009-11-20 07:08::2009-11-20 07:09"]
                        val
2009-11-20 07:08:18 -1.5574
2009-11-20 07:08:45 -1.8846
2009-11-20 07:09:47  0.4550
2009-11-20 07:09:57  0.9598
R>