相关疑难解决方法(0)

重塑多维数组

我有一个表示每小时温度数据的数组,并希望计算每日最大值(或最小值,或均值).我可以使用for循环来做到这一点,但我相信在R中必须有更好的方法来做到这一点.

require(ncdf4)
nc <- nc_open('file.nc')
t2 <- ncvar_get(nc,var='T2')  # [ncols, nrows, nsteps]
Run Code Online (Sandbox Code Playgroud)

现在t2是一个阵列,每天有3144个小时的时间步长.我想要的是:

t2.max[ncols, nrows, 31]
Run Code Online (Sandbox Code Playgroud)

或者,更一般地说,我想重塑t2:

t2.reshape[ncols, nrows, ndays, 24]
Run Code Online (Sandbox Code Playgroud)

从那里我可以使用apply来计算每日平均值或最大值或其他.

我希望结果是一个数组,而不是数据框.

建议?我尝试使用reshape包中的melt/cast,但无法理解如何指定所需的公式.

r multidimensional-array reshape

4
推荐指数
1
解决办法
8481
查看次数

R中的子集数据帧使用循环

我有一个如下所示的数据框:

----------

index   ID   date              Amount
2       1001 2010-06-08         0
21      1001 2010-10-08        10
6       1002 2010-08-16        30
5       1002 2010-11-25        20
9       1003 2010-01-01         0
8       1003 2011-03-06        10
12      1004 2012-03-12        10
11      1004 2012-06-21        10
15      1005 2010-01-01        30
13      1005 2010-04-06        20
Run Code Online (Sandbox Code Playgroud)

我希望对这些数据进行子集化,以便我有新的数据帧,每个ID就像这样

index   ID   date              Amount
2       1001 2010-06-08         0
21      1001 2010-10-08        10
Run Code Online (Sandbox Code Playgroud)

6       1002 2010-08-16        30
5       1002 2010-11-25        20
Run Code Online (Sandbox Code Playgroud)

等等.

我不需要保存新的数据帧,但用它来执行一些基本的计算.此外,我想在我的整个表上执行此操作,该表包含超过10000个ID,因此需要循环.我试过这个

    temp <- data.frame(Numb=c(),Dt=c(),Amt=c())
for (i in seq_along(stNew$ID)){
   temp[i,] <- subset(stNew, …
Run Code Online (Sandbox Code Playgroud)

r subset dataframe

4
推荐指数
3
解决办法
3万
查看次数

为什么apply()返回不正确的列类型?

所以我最近开始使用R并且该apply()功能正在绊倒我.我很感激这方面的帮助:

is.numeric(iris$Sepal.Length) # returns TRUE
is.numeric(iris$Sepal.Width)  # returns TRUE
is.numeric(iris$Petal.Length) # returns TRUE
is.numeric(iris$Petal.Width)  # returns TRUE
Run Code Online (Sandbox Code Playgroud)

但,

apply(iris, 2, FUN = is.numeric) 
Run Code Online (Sandbox Code Playgroud)

回报

Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
       FALSE        FALSE        FALSE        FALSE        FALSE 
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

r apply

4
推荐指数
1
解决办法
106
查看次数

R 中均值的分组条形图

我有一个数据集(学习者),其中包含学生测试成绩(学习者$literacy_total)、他们的年级(即1、2、3、...、12年级)和他们的性别(学习者$性别)。我想创建一个条形图,其中 x 轴上有成绩,y 轴上有平均分数,每个成绩有两列(一列用于男性,一列用于女性),这样我可以看到男孩/女孩的表现在每个年级。我可以使用以下代码轻松创建每个年级的总体平均值图:

fig.dist <- split(learner$literacy_total, learner$learner_grade)
fig.mean <- sapply(fig.dist, mean, na.rm = TRUE)
barplot(fig.mean)
Run Code Online (Sandbox Code Playgroud)

但是我如何将这些分组,以便对于每个年级,我可以分别看到男孩/女孩的平均测试成绩。

在其他问题中,我看到过对类别进行分组或用图表表示平均值的代码,但我正在努力解决如何将两者放在一起的问题。

r bar-chart

4
推荐指数
1
解决办法
8537
查看次数

R 中应用函数族的命名/名称

我目前正在学习 R。特别是我需要记住 -function 系列中的函数apply(例如lapplysapplymapply等)。我知道apply-function 系列中的每个函数的作用(特别是这个答案很有帮助),但有时会混淆名称。

每个 apply 函数的前缀是否有自然含义(例如lapply = 'list'-apply)?

r apply lapply sapply mapply

4
推荐指数
1
解决办法
197
查看次数

按各个子列表的长度对嵌套列表进行排序

如何按子列表的长度对嵌套列表进行排序:

l <- list(list("a","b","c"), list("d","e"), list("f"))
Run Code Online (Sandbox Code Playgroud)

使用这个它应该返回:

list(list("f"), list("d","e"), list("a","b","c"))
Run Code Online (Sandbox Code Playgroud)

r list

3
推荐指数
1
解决办法
1066
查看次数

dplyr版本对数据帧进行分组,然后在每个组上创建回归模型

任何人都可以建议dplyr回答以下问题吗? 按国家/地区分割data.frame,并在每个子集上创建线性回归模型

为完整起见,链接中的问题和答案包含在下面.

作为参考,这是Josh的问题:

我有一个来自世界银行的数据框架,看起来像这样;

  country date BirthRate     US.   
4   Aruba 2011    10.584 25354.8
5   Aruba 2010    10.804 24289.1
6   Aruba 2009    11.060 24639.9
7   Aruba 2008    11.346 27549.3
8   Aruba 2007    11.653 25921.3
9   Aruba 2006    11.977 24015.4
Run Code Online (Sandbox Code Playgroud)

总而言之,在这个数据框中有70个国家的子集,我想对其进行线性回归.如果我使用以下内容,我会为一个国家获得一个不错的lm;

andora = subset(high.sub, country == "Andorra")

andora.lm = lm(BirthRate~US., data = andora)

anova(andora.lm)
summary(andora.lm)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在for循环中使用相同类型的代码时,我会收到一个错误,我将在代码下面打印出来;

high.sub = subset(highInc, date > 1999 & date < 2012)
high.sub <- na.omit(high.sub)
highnames <- unique(high.sub$country)

for (i in highnames) {
  linmod …
Run Code Online (Sandbox Code Playgroud)

for-loop group-by r idiomatic dplyr

3
推荐指数
1
解决办法
1078
查看次数

R中Row的多列的最小值和中值

鉴于dataframe如下:

V1  V2  V3
5   8   12
4   9   5
7   3   9
...
Run Code Online (Sandbox Code Playgroud)

如何将列添加到dataframe这3列的最小值和中值,为每行计算?

生成的DF应如下所示:

V1  V2  V3  Min  Median
5   8   12  5    8
4   9   5   4    5
7   3   9   3    7
...
Run Code Online (Sandbox Code Playgroud)

我试过用dplyr::mutate:

mutate(df, Min = min(V1,V2,V3)) 
Run Code Online (Sandbox Code Playgroud)

但这需要整个数据帧的最小值并将该值放在每一行中.我怎样才能获得每一行的最小值和中位数?

对于Mean,我可以使用rowMeansin mutate,但min和median没有类似的函数.

也尝试过,

lapply(df[1:3], median)
Run Code Online (Sandbox Code Playgroud)

但它只产生每列的中位数

dd <- read.table(header = TRUE, text = 'V1  V2  V3
5   8   12
4   9   5
7   3   9')
Run Code Online (Sandbox Code Playgroud)

r

3
推荐指数
2
解决办法
6011
查看次数

聚合而不减少数据帧的维度

我试图在R中使用聚合函数,我希望输出数据框的维度保持不变.例如:假设我有以下数据框

Name------Type------    Price   
Prod1-----A--------       $1
Prod2----A---------       $5
Prod3----B----------       $7
Prod4-----B---------       $9
Run Code Online (Sandbox Code Playgroud)

在R中使用聚合函数后,通过聚合Type和函数作为价格的总和.我得到以下结果:

Type-------Value
A-----------6
B-----------16 
Run Code Online (Sandbox Code Playgroud)

但是,我希望数据框的维度保持不变.例如:

Name-----Type----Price----Value  
Prod1----A-------$1-------$6
Prod2----A-------$5--------$6
Prod3----B--------$7-------$16
Prod 4----B-------$9--------$16
Run Code Online (Sandbox Code Playgroud)

我不想在这个应用程序中使用Loop.请建议任何其他方式这样做.

group-by aggregate r dimension

3
推荐指数
1
解决办法
154
查看次数

循环和引导脚本运行时间过长

我有以下R脚本需要超过24小时,但最后还是运行在Windows 1010-gigabyte ramcore M7。该脚本执行以下操作:

这是我想要做的 R

  • A. 我已经生成了一个 50 时间序列数据集。

  • B. 我将相同的时间序列数据集切成以下大小的块:2,3,...,48,49使我有 48 个不同的时间序列,这些时间序列是从上面的第 1 步形成的。

  • C.我划分的每个48-时间序列数据集成traintest套所以可以使用rmse功能在Metrics包以获得均方根误差(RMSE),用于形成在步骤2中的48子系列。

  • D. 然后根据它们的块大小将每个系列的 RMSE 制成表格

  • E. 我ARIMA为每个 48 个不同的时间序列数据集获得了最佳模型。

我的 R 脚本

# simulate arima(1,0,0)
library(forecast)
library(Metrics)

n=50
phi <- 0.5
set.seed(1)

wn <- rnorm(n, mean=0, sd=1)
ar1 <- sqrt((wn[1])^2/(1-phi^2))

for(i in 2:n){
  ar1[i] <- ar1[i - 1] * phi + wn[i]
}
ts …
Run Code Online (Sandbox Code Playgroud)

loops r

3
推荐指数
1
解决办法
327
查看次数