Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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,我是R新手,我的问题是我知道我需要做什么,只是不知道如何在R中做。我有一个来自web服务负载测试的非常大的数据帧,大约2000万次观察。我有以下变量: epochtime, uri, cache (hit or miss) 我想我需要做很多事情。我需要为前50个不同的URI对数据帧进行子集,然后为每个子集中的每个观察计算该时间点的缓存命中率%。最终目标是通过URI绘制缓存命中/未命中百分比随时间的变化曲线 我已经读过,现在还在读关于这个话题的各种帖子,但是R是一个非常新的话题,我有一个最后期

我是R新手,我的问题是我知道我需要做什么,只是不知道如何在R中做。我有一个来自web服务负载测试的非常大的数据帧,大约2000万次观察。我有以下变量:

epochtime, uri, cache (hit or miss) 
我想我需要做很多事情。我需要为前50个不同的URI对数据帧进行子集,然后为每个子集中的每个观察计算该时间点的缓存命中率%。最终目标是通过URI绘制缓存命中/未命中百分比随时间的变化曲线

我已经读过,现在还在读关于这个话题的各种帖子,但是R是一个非常新的话题,我有一个最后期限。如果能得到任何帮助,我将不胜感激

编辑:

我无法提供确切的数据,但看起来是这样的,我从Mongo数据库中检索到的至少2000万个观测值。时间是纪元,我们每秒记录数千次,所以时间有很多重复,这是意料之中的。可能有超过50个uri,我只关心前50个。最终结果将是一个随时间变化的折线图,按URI显示的总出现次数为%TCP\u。希望这更清楚

time                uri                 action
1355683900          /some/uri           TCP_HIT
1355683900          /some/other/uri     TCP_HIT 
1355683905          /some/other/uri     TCP_MISS
1355683906          /some/uri           TCP_MISS

您正在寻找
aggregate
函数

将您的数据帧称为u:

> u
        time             uri   action
1 1355683900       /some/uri  TCP_HIT
2 1355683900 /some/other/uri  TCP_HIT
3 1355683905 /some/other/uri TCP_MISS
4 1355683906       /some/uri TCP_MISS
下面是一个子集的命中率(使用因子级别的顺序,默认情况下使用字母顺序的TCP_HIT=1,TCP_MISS=2),间隔为10秒:

ratio <- function(u) aggregate(u$action ~ u$time %/% 10,
         FUN=function(x) sum((2-as.numeric(x))/length(x)))

或者在计算比率之前按URI过滤数据帧。

您正在寻找
聚合
函数

将您的数据帧称为u:

> u
        time             uri   action
1 1355683900       /some/uri  TCP_HIT
2 1355683900 /some/other/uri  TCP_HIT
3 1355683905 /some/other/uri TCP_MISS
4 1355683906       /some/uri TCP_MISS
下面是一个子集的命中率(使用因子级别的顺序,默认情况下使用字母顺序的TCP_HIT=1,TCP_MISS=2),间隔为10秒:

ratio <- function(u) aggregate(u$action ~ u$time %/% 10,
         FUN=function(x) sum((2-as.numeric(x))/length(x)))

或者在计算比率之前通过URI过滤数据帧。

@MatthewLundberg的代码是正确的想法。具体来说,您需要使用拆分-应用-合并策略

但是,考虑到数据的大小,我想看看
data.table


您可以从视觉上看出--data.table速度更快的原因。

@MatthewLundberg的代码是正确的想法。具体来说,您需要使用拆分-应用-合并策略

但是,考虑到数据的大小,我想看看
data.table


您可以直观地看到--data.table速度更快的原因。

认为将我的解决方案与大家分享,以解决这些问题中的绘图部分

我的R“noobness”是我的闪光点,但这就是我想到的。它绘制了一个基本的线条图。它绘制的是实际值,我没有做任何转换

for ( i in 1:length(h)) {
  name <- unlist(h[[i]][1])  
  dftemp <- as.data.frame(do.call(rbind,h[[i]][2]))
  names(dftemp) <-  c("time", "cache")
  plot(dftemp$time,dftemp$cache, type="o")
  title(main=name)
}
for(1中的i:长度(h)){

name认为与大家分享我对问题的绘图部分的解决方案会很有用

我的R“noobness”我在这里的光芒,但这是我想到的。它绘制了一个基本的线图。它绘制了实际值,我没有做任何转换

for ( i in 1:length(h)) {
  name <- unlist(h[[i]][1])  
  dftemp <- as.data.frame(do.call(rbind,h[[i]][2]))
  names(dftemp) <-  c("time", "cache")
  plot(dftemp$time,dftemp$cache, type="o")
  title(main=name)
}
for(1中的i:长度(h)){

姓名请提供一个具有代表性的示例。欢迎使用StackOverflow!如果您提供了一个可复制的数据示例,并且具体说明了您的问题(提供所需的输出)这将更容易帮助您。请提供一个具有代表性的示例。欢迎使用StackOverflow!如果您提供了数据的可复制示例,并且具体说明了您的问题(提供所需的输出)帮助你会容易得多。谢谢。现在我将尝试弄清楚你到底做了什么以及如何绘制它。:)我确实看到我现在有一个列表要处理,虽然我不确定这是否有效。我在一个1200万obs.dataseet上运行了此操作,而不是像你上面显示的%我得到:
[[925][[925]]$uri[1]“env/service/2/method/blah”[[925]]$hits u$time%/%10 u$action 1 135561363-3 2 135561382-3 135561386-3 4 135561473-3 5 135561507-7
Nevermind,在另一个数据集上运行此操作,我得到了看起来正确的数字。但我一直在绘制此操作。R列表的行为似乎与任何其他语言中的行为不同。我想做的是对于列表中的每个项目,绘制嵌套列表。
>h[1][[1][[1]]]$uri[1]“/service/0/method”[[1]]$hits u$time%/%10 u$action 1 135561701 0 2 135561707 0 3 135561710 4 135561713 0
任何建议都将不胜感激,谢谢。现在我将尝试弄清楚您到底做了什么,以及如何策划它。:)我确实看到我现在有一个列表要处理,但我不确定这是否有效。我针对1200万obs.dataseet,而不是您上面显示的%我得到:
[[925]][[925]]$uri[1]“env/service/2/method/blah”[[925]]$hits u$time%/%10 u$action 1 135561363-3 2 135561382-3 135561386-3 4 135561473-3 5 135561507-7
Nevermind,在另一个数据集上运行此操作,我得到了看起来正确的数字。但我一直在绘制此操作。R列表的行为似乎与任何其他语言中的行为不同。我想做的是对于列表中的每个项目,绘制嵌套列表。
>h[1][[1][[1]]]$uri[1]“/service/0/method”[[1]]$hits u$time%/%10 u$action 1 135561701 0 2 135561707 0 3 135561710 4 135561713 0
如有任何建议,将不胜感激,