我想知道如何从向量中大于我设置的阈值的元素中减去特定值?
例如,如果我的数据定义为:
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
}
}
这显然是行不通的,但是我为实现目标所能做的事情感到困惑。由于之后需要绘制这些数据,因此我需要它们在输出矢量内保持原始顺序。非常感谢您的帮助!
答案 0 :(得分:1)
一个简单的答案是
x[x>200] = x[x>200] - 360
x>200
:返回一个逻辑向量,其中每个值thas大于200为TRUE,其他为FALSE 您的代码是错误的,因为您使用错误的运算符 [。它必须抛出一个错误。
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