我有以下数据:
>str(Maximum)
num [1:6] 1.4 1.07 1.89 0.342 0.00 1.998
我想总结所有这些值,但在第二和第三,第四和第五之间,只有更大的值。所以在这种情况下,我正在寻找1.4 + 1.89 + 0.342 + 1.998。我将如何在R代码中执行此操作?
答案 0 :(得分:4)
第一个元素,加上最大值(2,3)加上最大值(4,5)+第6个元素。
maximum[1] + max(maximum[2:3]) + max(maximum[4:5]) + maximum[6]
答案 1 :(得分:3)
如果你的向量Maximum
总是有6个元素,弗洛里安的回答是最简单的方法。但是如果你的矢量更长,你可以这样做:
z1 = Maximum[seq(from = 2, to = length(Maximum)-1, by = 2)]
z2 = Maximum[seq(from = 3, to = length(Maximum)-1, by = 2)]
z3 = ifelse(z1>z2, z1, z2)
result = Maximum[1] + sum(z3) + Maximum[length(Maximum)]
例如:
Maximum = floor(runif(22, 1, 100))
> Maximum
[1] 96 6 1 10 90 15 58 48 94 97 78 95 42 79 61 25 61 74 93 37 44 22
z1将是偶数索引(不包括末尾)的元素:
> z1
[1] 6 10 15 48 97 95 79 25 74 37
z2奇数索引处的元素(不包括末尾):
> z2
[1] 1 90 58 94 78 42 61 61 93 44
和z3每个索引的z1和z2之间的最大值:
> z3
[1] 6 90 58 94 97 95 79 61 93 44
然后通过添加z3以及Maximum
注意:最大向量应具有偶数个元素。
答案 2 :(得分:2)
您可以使用<vector.name>[<positions>]
指定向量中的位置。此外,您可以使用-
指定要跳过的位置。因此,
Maximum <- c(1.4, 1.07, 1.89, 0.342, 0.00, 1.998)
Maximum[-c(2,5)]
# [1] 1.400 1.890 0.342 1.998
sum( Maximum[-c(2,5)] )
# [1] 5.63
答案 3 :(得分:1)
这里常用的方法是使用tapply
执行&#34;群组操作&#34;然后汇总中间值。
vec <- c(1.4, 1.07, 1.89, 0.342, 0.00, 1.998)
group <- c(1, 2, 2, 3, 3, 4)
此处,计算每组的最大值
tapply(vec, group, max)
1 2 3 4
1.400 1.890 0.342 1.998
然后你可以对结果值求和
sum(tapply(vec, group, max))
[1] 5.63
动态构建组变量的一种方法是使用rep
这样的几次。
reps <- c(1, rep(2, (length(vec) / 2) - 1), 1)
rep(seq_along(reps), reps)
[1] 1 2 2 3 3 4