我有一个表示每小时温度数据的数组,并希望计算每日最大值(或最小值,或均值).我可以使用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,但无法理解如何指定所需的公式.
我有一个如下所示的数据框:
----------
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并且该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)
这是怎么回事?
我有一个数据集(学习者),其中包含学生测试成绩(学习者$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。特别是我需要记住 -function 系列中的函数apply(例如lapply、sapply、mapply等)。我知道apply-function 系列中的每个函数的作用(特别是这个答案很有帮助),但有时会混淆名称。
每个 apply 函数的前缀是否有自然含义(例如lapply = 'list'-apply)?
如何按子列表的长度对嵌套列表进行排序:
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) 任何人都可以建议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) 鉴于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中使用聚合函数,我希望输出数据框的维度保持不变.例如:假设我有以下数据框
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.请建议任何其他方式这样做.
我有以下R脚本需要超过24小时,但最后还是运行在Windows 10的10-gigabyte ram和core M7。该脚本执行以下操作:
这是我想要做的 R
A. 我已经生成了一个 50 时间序列数据集。
B. 我将相同的时间序列数据集切成以下大小的块:2,3,...,48,49使我有 48 个不同的时间序列,这些时间序列是从上面的第 1 步形成的。
C.我划分的每个48-时间序列数据集成train和test套所以可以使用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)