R 如何计算这些数据的时区?
我有一个非常大的客户反馈数据集,我想删除重复的数据集 反馈如下所示:R 如何计算这些数据的时区?,r,python-2.7,time,timezone,timezone-offset,R,Python 2.7,Time,Timezone,Timezone Offset,我有一个非常大的客户反馈数据集,我想删除重复的数据集 反馈如下所示: Great service!, n days ago OK, n days ago Could be better, n days ago Awesome, n days ago YES!, n days ago 为了获得每个反馈的时间戳,我从文件下载到我的计算机的时间(例如2015-07-06 EST-5天=2015-07-01)中减去n天前的时间(例如5天前的时间) 问题是我不知道我下载的服务器的时区,即记录反馈的时间
Great service!, n days ago
OK, n days ago
Could be better, n days ago
Awesome, n days ago
YES!, n days ago
为了获得每个反馈的时间戳,我从文件下载到我的计算机的时间(例如2015-07-06 EST-5天=2015-07-01
)中减去n天前的时间(例如5天前的时间)
问题是我不知道我下载的服务器的时区,即记录反馈的时间,因此来自同一客户的一些相同反馈会记录两次。服务器已关闭,我无法访问
例如:
Feedback, Timestamp
Great service!, 2015-07-05 00:00
Great service!, 2015-07-04 02:00
OK, 2015-04-07 09:00
OK, 2015-04-06 17:00
Could be better, 2015-08-08 01:00
Could be better, 2015-08-07 13:00
Awesome, 2015-07-10 03:00
Awesome, 2015-07-09 19:00
YES!, 2015-03-20 03:00
YES!, 2015-03-19 13:00
假设无法从服务器获取时区,是否有一种方法可以根据我在这里提供的数据计算时区?我想不出来,所以我希望有人能帮忙 在这种情况下,很难断定评论是重复的。如果您愿意将相同的“反馈”视为重复,您可以按如下方式使用dplyr
来过滤第一行:
library(dplyr)
df <- data.frame(Feedback = c('Great service!', 'Great service!', 'OK', 'OK', 'Could be better', 'Could be better', 'Awesome', 'Awesome', 'YES!', 'YES!', 'Whatever'), Timestamp = as.POSIXct(c('2015-07-05 00:00', '2015-07-04 02:00',
'2015-04-07 09:00', '2015-04-06 17:00',
'2015-08-08 01:00', '2015-08-07 13:00',
'2015-07-10 03:00', '2015-07-09 19:00',
'2015-03-20 03:00', '2015-03-19 13:00',
'2015-04-19 01:00')), stringsAsFactors = FALSE)
df <- df %>% arrange(Feedback, Timestamp) %>% group_by(Feedback) %>% slice(1)
如果你想计算时间增量,这里是你将如何做。如您所见,它们高于我在上面用作示例的60分钟阈值:
df <- df %>% arrange(Feedback, Timestamp) %>% group_by(Feedback) %>% summarise(timedelta = as.numeric(difftime(max(Timestamp), min(Timestamp), units = 'mins')))
df
Source: local data frame [6 x 2]
Feedback timedelta
(chr) (dbl)
1 Awesome 480
2 Could be better 720
3 Great service! 1320
4 OK 960
5 Whatever 0
6 YES! 840
df%arrange(反馈,时间戳)%%>%group_by(反馈)%%>%summary(timedelta=as.numeric(difftime(max(Timestamp),min(Timestamp),units='mins'))
df
来源:本地数据帧[6 x 2]
反馈时间增量
(chr)(dbl)
1480
2可能更好720
3.服务很好!1320
4好的960
5.0
6是的!840
更新:根据以下注释,要始终保留第一次出现,请使用以下命令:
df <- df %>% arrange(Feedback, Timestamp) %>% group_by(Feedback) %>% mutate(Timedelta = as.numeric(difftime(Timestamp, lag(Timestamp), units = 'mins'))) %>% filter(is.na(Timedelta) | Timedelta > 60) %>% select(-Timedelta)
df%arrange(Feedback,Timestamp)%%>%group_by(Feedback)%%>%mutate(Timedelta=as.numeric(difftime(Timestamp,lag(Timestamp),units='mins'))%%>%filter(is.na(Timedelta)| Timedelta>60)%%select(-Timedelta)
我正在创建一个附加列并取消选中它,以使事情更容易理解。有一种方法可以将表达式组合到过滤器本身,这有点复杂。为什么删除了语言标记?@Pascal这个问题与语言有什么关系?为什么不是C++,perl?@ HelLov,这是OP的选择,你不能违背这个选择!谢谢,使用时间增量进行过滤是个好主意。但当我尝试你的例子时,除了“whatever”之外的所有反馈都被删除了?这是因为所有的时间增量都在60分钟之外。更改数据和过滤条件以查看想法的实际效果。你需要调整以适应你的需要。我理解,但是有没有一种方法可以基于时间增量进行过滤,同时保证每个独特的反馈中至少有一个会保留在新的df中?
df <- df %>% arrange(Feedback, Timestamp) %>% group_by(Feedback) %>% mutate(Timedelta = as.numeric(difftime(Timestamp, lag(Timestamp), units = 'mins'))) %>% filter(is.na(Timedelta) | Timedelta > 60) %>% select(-Timedelta)