小编San*_*ado的帖子

R:使用 3D 数组(纬度、经度和时间)随时间计算函数的最佳方法是什么?

我经常使用大型 3D 数组(纬度、经度和时间),例如 720x1440x480 的大小。通常,我需要对每个纬度和经度随时间进行操作,例如,获取平均值(导致 2D 数组)或及时获取滚动平均值(导致 3D 数组),或更复杂的函数。

我的问题是:哪种包装(或方式)最有效和最快?

我知道一个选项是基础 R,使用 apply 函数和滚动函数与提供 rollapply 函数的包 zoo 混合。另一种方式是使用 tidyverse,另一种方式是使用 data.table。以及这些包之间的组合。但有没有最快的?

例如,如果我有这个数据立方体:

data <- array(rnorm(721*1440*480),dim = c(721,1440,480))
Run Code Online (Sandbox Code Playgroud)

哪些维度是纬度、经度和时间,如下所示:

lat <- seq(from = -90, to = 90, by = 0.25)
lon <- seq(from = 0, to = 359.75, by = 0.25)
time <- seq(from = as.Date('1980-01-01'), by = 'month', length.out = 480)
Run Code Online (Sandbox Code Playgroud)

我通常需要做这样的事情(这是在基础 R + 动物园):

# Average in time
average_data <- apply(data, 1:2, mean)

# Rolling mean, width of window = …
Run Code Online (Sandbox Code Playgroud)

arrays r data.table tidyverse

10
推荐指数
2
解决办法
261
查看次数

安装ncdf4包:错误,找不到nc-config或不可执行

我试过安装ncdf4包.我有R版3.1.1.

问题似乎是找到了nc-config.如果我谷歌针对这个特定的问题,那么我发现有相同问题的人,在安装libnetcdf-dev之前通过安装Debian软件包来解决它ncdf4.

我已经安装了该软件包,但我一直遇到同样的问题,

错误如下:

checking for nc-config... no
-----------------------------------------------------------------------------------
Error, nc-config not found or not executable.  This is a script that comes with the netcdf library, version 4.1-beta2 or later, and must be present for configuration to succeed.
Run Code Online (Sandbox Code Playgroud)

r netcdf

8
推荐指数
3
解决办法
6877
查看次数

dplyr 新版本 1.0.0 消除了 tbl_cube 函数,我发现没有替代它

我使用多维数组,当我需要绘图时,我通常将我的数据转换为 tibble through tbl_cube,然后用ggplot2. 今天新的dplyr 1.0.0更新到了CRAN,我发现现在tbl_cube已经不可用了。而且我找不到 tbl_cube 的替代品。我在今天之前做了类似这个玩具示例的事情来获得一个情节:

test_data1 <- array(1:50, c(5,5,2))
test_data2 <- array(51:100, c(5,5,2))

# list of my arrays
test_data <- list(exp1 = test_data1, exp2= test_data2)

# list of the dimentions
dims_list <- list(lat = 1:5, lon = 1:5, var = c('u','v'))

new_data <- as_tibble(tbl_cube(dimensions = dims_list, measures = test_data))

# Make some random plot
ggplot(new_data, aes(x=lon,y=lat)) +
geom_tile(aes(fill=exp2))+
geom_contour(aes(z=exp1),col='black')
Run Code Online (Sandbox Code Playgroud)

此示例运行并与以前的 dplyr 版本一起使用,但现在tbl_cube不再存在,因为不再存在。我知道在这个例子中,第三维不用于绘图,但我想表明我需要一些东西至少用于 3D 数组甚至 4D。

有关如何以简单的方式解决此问题的任何建议,例如tbl_cube

arrays r ggplot2 dplyr tibble

5
推荐指数
0
解决办法
225
查看次数

重命名因子变量的所有级别,是否有一种 tidyverse 方法可以做到这一点?

我偶尔需要重命名因子变量的所有级别。我知道如何使用 R 基础来实现这一点,例如:levels(factor_variable) <- levels(new_variable)。但我真的很想有一种方法可以使用tidyverse. 我查看了一下dplyrforcats但没有找到任何可以解决它的东西。我希望能够实现示例 1 中实现的目标,但需要与%>%操作员合作。

示例 1,使用 R 基(有效)

my_levels <- letters
sample_data <- data.frame(factor_data = factor(sample(my_levels,size = 500,replace = T) ,
                                               levels = my_levels),
                          Any_other_data = rnorm(500))

my_new_levels <- rnorm(length(letters))

levels(sample_data$factor_data) <- levels(factor(my_new_levels))
Run Code Online (Sandbox Code Playgroud)

示例 2,我尝试过但不使用 tidyverse 的一件事

library(tidyverse)

my_levels <- letters
sample_data <- tibble(factor_data = factor(sample(my_levels,size = 500,replace = T) ,
                                               levels = my_levels),
                          Any_other_data = rnorm(500))

my_new_levels <- rnorm(length(letters))

# Get error
sample_data <- sample_data …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse forcats

0
推荐指数
1
解决办法
2845
查看次数

标签 统计

r ×4

arrays ×2

dplyr ×2

tidyverse ×2

data.table ×1

forcats ×1

ggplot2 ×1

netcdf ×1

tibble ×1