小编Shr*_*yes的帖子

如何获得具有前10个最高值的变量的列名?

如果我有一个包含600列(变量)的data.frame(sum_clus)和没有NA并且都是数值的10行,我该如何创建5个新变量,这些变量为我提供该行中前5个变量的列名?

例如.

max <- apply(sum_clus ,1, max)    
for(ii in 1:10) sum_clus$max[ii] <- colnames(sum_clus)[which(sum_clus[ii , ] 
== sum_clus[ii, sum_clus[ii,] == max[ii]])]
Run Code Online (Sandbox Code Playgroud)

上面的代码帮助我创建了一个变量sum_clus $ max,它给出了每行中max变量的列名.同样,我怎样才能获得5个这样的变量,它们给出了前5个变量的列名?sum_clus $ max,sum_clus $ second_but_max等等.

提前致谢!

r dataframe

6
推荐指数
2
解决办法
1935
查看次数

如何将apply等效于任何for循环

大多数专业用户建议我永远不要在R中使用循环.请改用apply函数.问题是,如果您不熟悉函数式编程,那么为每个for/while循环编写一个应用等效项并不是那么直观.以下面的例子为例.

F <- data.frame(name = c("a", "b", "c", "d"), var1 = c(1,0,0,1), var2 = c(0,0,1,1),  
var3 = c(1,1,1,1), clus = c("one", "two", "three", "four"))
F$ObjTrim <- ""
for (i in 1:nrow(F))
{
 for (j in 2:(ncol(F)-1))
{
 if(F[i, j] == 1) 
 {F$ObjTrim[i]  <- paste(F$ObjTrim[i], colnames(F)[j], sep = " ") }

 }
  print(i)
}
Run Code Online (Sandbox Code Playgroud)

这里的目标是创建一个变量"ObjTrim",它接受所有具有值== 1的列名的值.有人可以建议一个等同于此的良好应用吗?

例如,上面的代码将给出:

 name var1 var2 var3  clus         ObjTrim
1    a    1    0    1   one       var1 var3
2    b    0    0    1   two            var3
3    c    0 …
Run Code Online (Sandbox Code Playgroud)

r apply

5
推荐指数
2
解决办法
1976
查看次数

使用R的ARIMA建模的奇怪案例

我在使用R中的函数arma {tseries}arima {stats}拟合ARMA模型时发现了一些奇怪的东西.

两个函数采用的估计程序存在根本区别,即在arma {stats}中的卡尔曼滤波器,而不是arma {tseries}中的ML估计.

鉴于两个函数之间的估计过程存在差异,如果我们使用相同的时间序列,则不会期望两个函数的结果完全不同.

好吧他们可以!

生成以下时间序列并添加2个异常值.

set.seed(1010)
ts.sim <- abs(arima.sim(list(order = c(1,0,0), ar = 0.7), n = 50))
ts.sim[8] <- ts.sim[12]*8
ts.sim[35] <- ts.sim[32]*8
Run Code Online (Sandbox Code Playgroud)

使用这两个函数拟合ARMA模型.

# Works perfectly fine
arima(ts.sim, order = c(1,0,0))
# Works perfectly fine
arma(ts.sim, order = c(1,0))
Run Code Online (Sandbox Code Playgroud)

将时间序列的级别更改为10亿

# Introduce a multiplicative shift
ts.sim.1 <- ts.sim*1000000000
options(scipen = 999)
summary(ts.sim.1)
Run Code Online (Sandbox Code Playgroud)

使用2个函数拟合ARMA模型:

# Works perfectly fine
arma(ts.sim.1, order = c(1,0))

# Does not work
arima(ts.sim.1, order = c(1,0,0))

## Error …
Run Code Online (Sandbox Code Playgroud)

r time-series kalman-filter hessian-matrix

2
推荐指数
1
解决办法
5196
查看次数