library(tidyverse)
gbm_vec <- function(nsim = 1000, t = 5, mu = 0.1, sigma =.3, S0 = 3400, dt = 1/252) {
epsilon <- matrix(rnorm(t*nsim, sd = .3, mean = .0004), ncol = nsim, nrow = t)
gbm <- exp((mu - sigma * sigma / 2) * dt + sigma * epsilon * sqrt(dt))
gbm <- apply(rbind(rep(S0, nsim), gbm), 2, cumprod)
return(gbm)
}
nsim <- 1000
t <- 5
mu <- 0.1
sigma <- .3
S0 <- 3477.13
gbm <- gbm_vec(nsim, t, mu, sigma, S0) #function to have the table I'm talking about
View(gbm)运行代码查看表。我如何知道1000列中有多少列的值至少大于3500?
发布于 2020-10-13 14:20:49
我们可以使用colSums:
val <- 3500
sum(colSums(gbm > val) > 0)colSums(gbm > val)计算列中的值总数,该值大于val。然后,我们计算出至少有多少列的值比带有val的sum大1。
发布于 2020-10-13 14:30:02
下面是一种tidyverse方法,用mtcars演示,并检查所有数字列中的任何值>1:
mtcars %>%
summarise_if(is.numeric, ~any(. > 1)) %>%
gather() %>%
count(value)
# value n
# 1 FALSE 2
# 2 TRUE 9结果告诉您,有多少数值列至少有一个值>1,而有多少列没有。
发布于 2020-10-13 14:30:05
我认为@Ronak Shah的解决方案非常优雅。下面是另一个使用crossprod的选项
sum(crossprod(rep(1,nrow(gbm)),gbm)>0)https://stackoverflow.com/questions/64337027
复制相似问题