gpt4 book ai didi

r - 如何从数据框中删除部分重复项?

转载 作者:行者123 更新时间:2023-12-04 01:34:24 25 4
gpt4 key购买 nike

我正在导入的数据描述了在不同位置对或多或少均匀分布的时间戳进行的数字测量。有时这种“均匀分布”并不是真的,我必须丢弃一些值,哪个值并不重要,只要我为每个位置的每个时间戳都有一个值即可。

我用数据做什么?我将它添加到 result数据框。我有一个 timestamp列和时间戳列中的值,它们绝对根据 step 均匀分布.

timestamps <- ceiling(as.numeric((timestamps-epoch)*24*60/step))*step*60 + epoch
result[result$timestamp %in% timestamps, columnName] <- values

当我的时间戳落在同一时间步长时,这不起作用。这是一个例子:
> 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 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

在 Python 中,我会(错误地)使用字典来实现我所需要的:
dict(zip(timestamps, values)).items()

返回第一个坐标唯一的对列表。

在 R 中,我不知道如何以紧凑而有效的方式做到这一点。

最佳答案

我会用 subset结合 duplicated过滤第二个数据帧中的非唯一时间戳:

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

更新:要选择特定值,您可以使用 aggregate
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 - 如何从数据框中删除部分重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1769365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com