相关疑难解决方法(0)

矢量循环在矢量元素

我发现很难找到解决以下问题的快速解决方案:

我有一个观察矢量,它表明观察某些现象的时间.

example <- c(0,0,0,1,0,1,1,0,0,0,-1,0,0,-1,-1,0,0,1,0,0);
Run Code Online (Sandbox Code Playgroud)

现在我想在特定观察之间消除零,假设某个现象被认为会继续,直到发现一个矛盾的观察结果,即,如果在第三次观察中观察到''1',我想只有''1 ''到第11个元素,当第一个'-1'被观察到时.所以我想要的输出看起来像:

desired.output <- c(0,0,0,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,1,1,1);

> print(cbind(example, desired.output))
      example desired.output
 [1,]       0              0
 [2,]       0              0
 [3,]       0              0
 [4,]       1              1
 [5,]       0              1
 [6,]       1              1
 [7,]       1              1
 [8,]       0              1
 [9,]       0              1
[10,]       0              1
[11,]      -1             -1
[12,]       0             -1
[13,]       0             -1
[14,]      -1             -1
[15,]      -1             -1
[16,]       0             -1
[17,]       0             -1
[18,]       1              1
[19,]       0              1
[20,]       0              1
Run Code Online (Sandbox Code Playgroud)

我的蹩脚解决方案是

for (i in 1:length(example)){ …
Run Code Online (Sandbox Code Playgroud)

loops r vector vectorization

12
推荐指数
3
解决办法
651
查看次数

避免R中的循环

我决定学习R.我试图了解如何编写"R风格"函数并避免循环.以下是一个示例情况:

给定一个向量a,我想计算一个向量,b其元素b[i](向量索引从1开始)定义如下:

1 <= i <= 4:
b[i] = NaN

5 <= i <= length(a):
b[i] = mean(a[i-4] to a[i])
Run Code Online (Sandbox Code Playgroud)

基本上,如果我们假装'a'是速度列表,其中第一个条目在时间= 0,第二个在时间= 1秒,第三个在时间= 2秒...我想获得相应的向量描述过去5秒的平均速度.

例如:如果a is (1,1,1,1,1,4,6,3,6,8,9)然后b应该是(NaN, NaN, NaN, NaN, 1, 1.6, 2.6, 3, 4, 5.4, 6.4)

我可以使用循环来做到这一点,但我觉得这样做不会是"R风格".

谢谢,

Tungata

loops r

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

标签 统计

loops ×2

r ×2

vector ×1

vectorization ×1