相关疑难解决方法(0)

使用R中的data.table将多个列添加到data.table with =,只有一个函数调用

这是对这个问题的直接扩展.我有一个数据集,我想根据变量x和y找到变量v的所有成对组合:

library(data.table)
DT = data.table(x=rep(c("a","b","c"),each=6), y=c(1,1,6), v=1:18)
        x y  v
     1: a 1  1
     2: a 1  2
     3: a 6  3
     4: a 1  4
     5: a 1  5
     6: a 6  6
     7: b 1  7
     8: b 1  8
     9: b 6  9
    10: b 1 10
    11: b 1 11
    12: b 6 12
    13: c 1 13
    14: c 1 14
    15: c 6 15
    16: c 1 16
    17: c 1 17 …
Run Code Online (Sandbox Code Playgroud)

r combn data.table

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

如何加快这个_for_循环?使用data.table + lapply?

此代码生成一个类似于我自己的数据集:


df <- c(seq(as.Date("2012-01-01"), as.Date("2012-01-10"), "days"))
  df <- as.data.frame(df)
  df <- rbind(df, df)

id <- c(rep.int(1, 10), rep.int(2, 10))
  id <- as.data.frame(id)

cnt <- c(1:3, 0, 0, 4, 5:8, 0, 1, 0, 1:7)
  cnt <- as.data.frame(cnt)

df <- cbind(id, df, cnt)
  names(df) <- c("id", "date", "cnt")

df$date[df$date == "2012-01-10"] <- "2012-01-20"
Run Code Online (Sandbox Code Playgroud)

我试图找到过去7天内发生的变量'cnt'的总和.有时日期不是连续的(参见前面'df'中的最后一个日期) - 按id.

这是循环:


system.time(

  for(i in 1:length(df$date)) {
    df$cnt.weekly[i] <- 
      sum(df$cnt[which((df$date == df$date[i] - 1) & df$id == df$id[i])],
          df$cnt[which((df$date == df$date[i] - 2) & df$id == df$id[i])], …
Run Code Online (Sandbox Code Playgroud)

r lapply data.table

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

嵌套 for 循环的效率

我创建了以下代码,将 for 循环嵌套在 R 中的 for 循环内。它是计算 Power 的模拟。我读到 R 不太适合执行 for 循环,但我想知道是否可以应用任何效率来使其运行得更快一些。我对 R 以及任何类型的编程都很陌生。现在我看到的运行时间是:

m=10 我得到 0.17 秒

m=100 我得到 3.95 秒

m=1000 我得到 246.26 秒

m=2000 我得到 1003.55 秒

我希望将采样次数设置为 100K 以上,但恐怕甚至无法将其设置为 10K

这是代码:

m = 1000                        # number of times we are going to  take samples
popmean=120                     # set population mean at 120
popvar=225                      # set known/established population 
variance at 225
newvar=144                      # variance of new methodology 
alpha=.01                       # set alpha
teststatvect = matrix(nrow=m,ncol=1)    # empty vector …
Run Code Online (Sandbox Code Playgroud)

r

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

R中循环的替代

可能重复:
加速R中的循环操作

我有几个关于循环的问题.我知道R使用矢量化计算可以更快地工作,我想更改下面的代码来利用这一点.在论坛上查看其他一些答案,sapply函数似乎能够替换inside for循环,但我生成一个零向量,所以有一个错误.陶仍然是1000,我认为这是造成问题的原因.

我主要关心的是速度,因为我需要围绕整个算法创建一个循环,并绘制不同的V和n尺寸以进行进一步分析.

谢谢你的帮助

替代循环

tao = 1000
L = (tao - 1)   
n = 10      
V = 5               
I = 10000                       
V_s = matrix(rnorm(I), I, 1)
V_b = matrix(rnorm(I), I, 1)

signal <- matrix(0, L, 1)  

for( j in (n:L)){

    sapply(((j-n+1):j),function (tao) signal[j] = signal[j] + abs(V_s[tao] - V_b[tao]))

    signal[j] = (signal[j] / (n * V) )

} 
Run Code Online (Sandbox Code Playgroud)

原始循环

tao = 1000
L = (tao - 1)   
n = 10      
V = 5               
I = 10000                       
V_s …
Run Code Online (Sandbox Code Playgroud)

for-loop r

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

在R中创建矩阵的有效方法

我试图从矢量创建这样的矩阵:

    vec= c(2, 5, 9)
    > A
            [,1] [,2] [,3] [,4]
    [1,]     2    0    0    0
    [2,]     5    3    0    0
    [3,]     9    7    4    0
Run Code Online (Sandbox Code Playgroud)

实际上,第一列始终是向量元素,第二列以0开始,然后是(5-2 = 3),然后第二列的thirld元素是(9-2 = 7).然后第三列从0开始,然后是0和(9-5 = 4),最后一列始终为零.可能是vec更改为任何数字的长度,例如4,5,.......如何编写有效的函数或代码来创建此矩阵?

r matrix

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

在循环 R 中向向量添加元素的最(内存和时间)有效方法?

我可以想到几种方法来将元素添加到循环中的向量中。对于大循环,时间和内存变得很重要。哪个内存/时间效率最高?

这种方法可能不好,因为它在每次迭代时都会复制向量?

vec <- c()
for (i in 1:10) {
  vec <- c(vec, i)
}
Run Code Online (Sandbox Code Playgroud)

这可能是最佳的?

vec <- c()
for (i in 1:10) {
  vec <- append(vec, i)
}
Run Code Online (Sandbox Code Playgroud)

对于复杂的循环来说这可能会变得很麻烦

vec <- c()
for (i in 1:10) {
  vec[i] <- i
}
Run Code Online (Sandbox Code Playgroud)

其他方法?

r

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

R:列值的滚动计算(避免循环)

我想根据前一行和同一列的值逐步增加一个新列。你可以用一个循环来做,就像这样:

df <- data.frame(a = 2000:2010,
                 b = 10:20,
                 c = seq(1000, 11000, 1000),
                 x = 1000)
for(i in 2:nrow(df)) df$x[i] <- (df$c[i]) * df$a[i-1] / df$x[i-1] + df$b[i] * df$a[i]
df
      a  b     c        x
1  2000 10  1000  1000.00
2  2001 11  2000 26011.00
3  2002 12  3000 24254.79
4  2003 13  4000 26369.16
5  2004 14  5000 28435.80
6  2005 15  6000 30497.85
7  2006 16  7000 32556.20
8  2007 17  8000 34611.93
9  2008 18  9000 …
Run Code Online (Sandbox Code Playgroud)

loops r increment dataframe

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

加速R循环

使用apply系列中的函数可以轻松地在R中加速循环.如何在下面的代码中使用apply函数来加快速度?注意,在循环内,在每次迭代时,置换一列并将函数应用于新数据帧(即,具有一列置换的初始数据帧).我似乎无法申请工作,因为必须在循环内构建新的数据框.

#x <- data.frame(a=1:10,b=11:20,c=21:30) #small example
x <- data.frame(matrix(runif(50*100),nrow=50,ncol=100)) #larger example
y <- rowMeans(x)

start <- Sys.time()  

totaldiff <- numeric()

for (i in 1:ncol(x)){
    x.after <- x

    x.after[,i] <- sample(x[,i])

    diff <- abs(y-rowMeans(x.after))

    totaldiff[i] <- sum(diff)

}

colnames(x)[which.max(totaldiff)]

Sys.time() - start
Run Code Online (Sandbox Code Playgroud)

loops for-loop r apply

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

另一个适用问题

我完全相信一个有效的R程序应该尽可能避免使用循环,而应该使用apply函数的大系列.但如果没有痛苦,这是不可能的.例如,我面临一个问题,其解决方案涉及应用函数中的总和,因此结果列表减少到单个值,这不是我想要的.具体来说,我会尽量简化我的问题N =100

sapply(list(1:N), function(n) (
    choose(n,(floor(n/2)+1):n) * 
    eps^((floor(n/2)+1):n) * 
    (1- eps)^(n-((floor(n/2)+1):n))))
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,内部函数会导致构建向量的长度爆炸,而使用内部求和会将所有内容折叠为单值

sapply(list(1:N), function(n) (
    choose(n,(floor(n/2)+1):n) * 
    eps^((floor(n/2)+1):n) * 
    (1- eps)^(n-((floor(n/2)+1):n))))
Run Code Online (Sandbox Code Playgroud)

我想要的是一个N的程度列表.那你觉得怎么样?我该怎么修呢?

r apply

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

来自循环的rbind data.frame输出

我想重新生成一个生成data.frames的循环.这是我正在寻找的一般想法的[错误]循环.

for (i in 1:2){
a <- c(2, (i+10))
b <- c((i+10)), 5))
c[i] <- data.frame(a,b)
}
rbind(c)
Run Code Online (Sandbox Code Playgroud)

我想要一个像这样的输出:

2  11
11  5
2  12
12  5
Run Code Online (Sandbox Code Playgroud)

之前已经问过这个问题,但答案是一个直接的解决方案,没有任何解释.我不知道怎么读.它涉及do.callmget.

loops r rbind

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

标签 统计

r ×10

loops ×3

apply ×2

data.table ×2

for-loop ×2

combn ×1

dataframe ×1

increment ×1

lapply ×1

matrix ×1

rbind ×1