数学运算R中向量/对象的特定元素

时间:2018-11-13 01:23:24

标签: r if-statement vector subtraction

我想知道如何从向量中大于我设置的阈值的元素中减去特定值?

例如,如果我的数据定义为:

numbers = 1:500
data=  sample(numbers)

我现在有一个介于1到500之间的随机数字列表。

我现在想从此向量中大于200的每个值中减去360。从逻辑上讲,我想编写一个带if语句的for循环来执行此操作。我已经尽力编写如下代码:

for (i in 1:length(data)) {
       if data[i]>200 {
       data[] - 360
     } else {
       data[] - 0
     }
}

这显然是行不通的,但是我为实现目标所能做的事情感到困惑。由于之后需要绘制这些数据,因此我需要它们在输出矢量内保持原始顺序。非常感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

一个简单的答案是

x[x>200] = x[x>200] - 360
  1. x>200:返回一个逻辑向量,其中每个值thas大于200为TRUE,其他为FALSE
  2. 使用逻辑向量访问初始向量的元素。仅分配或访问逻辑向量中具有TRUE值的元素

您的代码是错误的,因为您使用错误的运算符 [。它必须抛出一个错误。

for (i in 1:length(data)) { 
    if (data[i]>200) { 
        data[i] = data[i] - 360
    }
}

这是正确的方法。您必须从头开始阅读R,以更好地理解运算符...

答案 1 :(得分:1)

data <- ifelse( data > 200, data - 360, data ) 非常适合此目的,您可以使用样本的数据向量:

set.seed( 1110 )                                      # make it reproducible
data <- sample( numbers )
head( data, 10 )
[1] 242 395 440 287 110  46 241 489 276 178
data[ data > 200 ] <- data[ data > 200 ] - 360        # replace inline
head( data )
[1] -118   35   80  -73  110   46 -119  129  -84  178

所以只是给另一种口味:

for (i in 1:length(data)) {
        if( data[i]>200 ){
        data[ i ] <- data[ i ] - 360}
}

更正了一些错误后,您的循环也可以正常工作,请参见下文:

        <tr ng-repeat="result in apiResult |orderBy:sortKey:reverse |filter:search">
          <td>{{result.NAME}}</td>
          <td>{{result.ADDRESSBLOCKHOUSENUMBER}}</td>
          <td>{{result.ADDRESSPOSTALCODE}}</td>
          <td>{{result.ADDRESSSTREETNAME}}</td>
        </tr>

答案 2 :(得分:1)

没有必要使用循环。这是最简单的方法-

data <- data - 360*(data > 200)

演示-

set.seed(1)
numbers <- 1:500
data <- sample(numbers)

head(data)
# [1] 133 186 286 452 101 445

data <- data - 360*(data > 200)

head(data)
# [1] 133 186 -74  92 101  85

答案 3 :(得分:0)

我会用ifelse

numbers = 1:500
data=  sample(numbers)

new_numbers <- ifelse(numbers >200,numbers-360, numbers)
new_numbers