使用计算值填充大型数据框

中国网

我有一个相当大的数据框(1.65 MM 行),如下所示:

  date        dayofyear time humidity temp
1 2008-01-01         1  300       99  38.2
2 2008-01-01         1  302       99  38.5
3 2008-01-01         1  304       99  38.5
4 2008-01-01         1  306       99  38.6
5 2008-01-01         1  308       99  38.9
6 2008-01-01         1  310       99  39.1
....

我想计算每一行的正午,并将其作为新列添加到数据框中。suncalc::getSunlightTimes(date)函数为我提供任何给定日期的正午。

如果我这样做:

solarNoons <- suncalc::getSunlightTimes(date = as.Date(dataFrame$date))

然后(显然)即使在一个小时后,命令也没有完成。

一个观察结果——即使数据框中有 1.65 MM 行,也只有大约 3000 个唯一日期。解决这个问题的最佳方法是什么?是否可以只调用getSunlightTimes()3000 次并仍然使用新列中的值填充数据框的 1.65 MM 行中的每一行?

这是我第一次发帖,但长时间阅读和学习。非常感激。

卡布尔

以下应该工作。假设我们生成一个 200 万行的数据框:

> N <- 2e6
> R <- data.frame(year = sample(2000:2009,N,TRUE),
+                 dayofyear = sample(365,N,TRUE),
+                 time = floor(runif(N,0,12))*100+floor(runif(N,0,60)),
+                 humidity = 99,
+                 temp = floor(runif(N,15,40)))
> R$date <- as.Date(with(R,strptime(paste(year,dayofyear),
+                                   "%Y %j", tz="GMT")))
> nrow(R)
[1] 2000000
> head(R)
  year dayofyear time humidity temp       date
1 2000       206  307       99   39 2000-07-24
2 2009       101 1019       99   16 2009-04-11
3 2004       307  547       99   21 2004-11-02
4 2003       270 1158       99   33 2003-09-27
5 2006        21  330       99   22 2006-01-21
6 2005       154  516       99   21 2005-06-03
> 

在这种情况下,date已经是一Date列,但如果你的是一个字符列,那么:

> R$date <- as.Date(R$date)

应该只需要几秒钟。

现在,获取所有唯一日期值的列表。这应该很快:

> dates <- unique(R$date)
> print(length(dates))
[1] 3650
> 

现在,getSunlightTimes在这个向量上运行在我的机器上使用suncalc0.4 版和 R 版 3.4.4只花了几秒钟

> times <- suncalc::getSunlightTimes(dates, lat=0, lon=0)

现在,生成一个索引向量,给出R$date唯一日期向量中每个日期的索引dates

> i <- match(R$date, dates)

现在,times通过相同的索引选择数据帧的

> solarNoons <- times[i,]
> nrow(solarNoons)
[1] 2000000
> 

如果我们选择一行 R:

> R[1234567,]
        year dayofyear time humidity temp       date
1234567 2002        24  535       99   17 2002-01-24

你会看到对应的行solarNoons是那个日期的结果:

> solarNoons[1234567,]
                        date lat lon           solarNoon               nadir
2616.352 2002-01-24 12:00:00   0   0 2002-01-24 12:13:14 2002-01-24 00:13:14
                     sunrise              sunset          sunriseEnd
2616.352 2002-01-24 06:09:42 2002-01-24 18:16:46 2002-01-24 06:11:58
                 sunsetStart                dawn                dusk
2616.352 2002-01-24 18:14:30 2002-01-24 05:47:49 2002-01-24 18:38:39
                nauticalDawn        nauticalDusk            nightEnd
2616.352 2002-01-24 05:22:22 2002-01-24 19:04:06 2002-01-24 04:56:50
                       night       goldenHourEnd          goldenHour
2616.352 2002-01-24 19:29:38 2002-01-24 06:38:39 2002-01-24 17:47:49
> 

如果需要,您可以将两个数据框合并在一起:

> R2 <- cbind(R, solarNoons)

这一切都假设“1.65 MM”意味着 165 万。如果您的意思是 165 万(即美国的万亿美元),那么您将需要一台更大的计算机。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用行和列作为指标,使用大型数据框中的值填充矩阵

来自分类Dev

从大型数据库查询(Python)填充熊猫数据框的值

来自分类Dev

如何使用计算数据创建历史数据框?

来自分类Dev

使用数据框中的值进行计算

来自分类Dev

使用计算和打印在数据框之间进行循环

来自分类Dev

密码-使用计算值创建关系

来自分类Dev

使用计算值创建对象

来自分类Dev

如何在数据框的行级应用计算?

来自分类Dev

Excel:计算排名避免重复值并使用计算范围

来自分类Dev

遍历数据框并使用列值匹配/填充行

来自分类Dev

使用 df 本身填充 R 数据框中的缺失值

来自分类Dev

使用Pandas创建大型数据框

来自分类Dev

使用python在单独的数据框中查找的值来计算新数据框列中的值

来自分类Dev

R:使用数据框A中的值作为填充数据框B中的行之前的日期

来自分类Dev

在熊猫数据框中使用.groupby计算唯一值

来自分类Dev

使用 lambda 计算熊猫数据框中的值

来自分类Dev

熊猫:如何在大型数据集中填充缺失值?

来自分类Dev

LESSCSS-使用计算和返回值

来自分类Dev

何时在Mobx中使用计算/可观察值

来自分类Dev

使用计算值作为匹配中的模式的惯用方式

来自分类Dev

在PostgreSQL查询的两个地方使用计算值

来自分类Dev

如何使用计算值创建匿名类型

来自分类Dev

在Eloquent的查询范围内使用计算值

来自分类Dev

如何在Oracle SQL计数中使用计算值

来自分类Dev

使用计算值作为图表中的标题

来自分类常见问题

Vue-在HTML数据内使用计算属性

来自分类Dev

使用计算总和作为Google图表的数据

来自分类Dev

如何使用计算组聚合数据

来自分类Dev

使用计算的字段在数据透视中更正总计

Related 相关文章

热门标签

归档