如何做明智的累计和?

问题描述:

X3   X4   X5   X6   X7   X8   X9 
-63.2929  -64.9519  -65.9586  -65.2485  -63.3387  -56.749  -51.7419 
-68.7098  -70.2028  -71.329  -70.5252  -68.7843  -63.0799  -58.7491 
58.3993  -60.0864  -60.7925  -59.6933  -57.2357  49.8444  44.1056 
-57.8334  59.6063  60.3079  -59.1852  -56.6365  -49.2706  -43.5538 
-37.6082  -39.6347  -39.6647  38.4396  34.9498  -26.6984  -21.9614 
37.2886  39.0565  -38.8722  -37.5427  -33.969  25.9074  21.7712 
-61.972  -63.0513  63.5082  -62.2337  59.7711  -54.2189  -51.6613 
-60.5783  -61.6254  -61.9812  -60.6696  58.066  -52.4656  -49.9653 

从上面的矩阵我想找到最大和最小单元格列明智的单元格,然后做每两个邻居的明智的累计和。例如;对于第1列,最小值为-68.70(识别单元格)并添加(-70.2028和-71.329)等等,最小值和最大值相同。我会怎么做?如何做明智的累计和?

data=read.table('test.csv', header=TRUE, sep=',') 

matrix=data.matrix(data) 
+3

目前还不清楚预期产出应该如何。你能举个例子吗? – 2015-01-20 21:43:36

这是你在找什么? (警告:使用不良编码做法的hack-y回答)

data = read.table(text = "X3   X4   X5   X6   X7   X8   X9 
-63.2929  -64.9519  -65.9586  -65.2485  -63.3387  -56.749  -51.7419 
-68.7098  -70.2028  -71.329  -70.5252  -68.7843  -63.0799  -58.7491 
58.3993  -60.0864  -60.7925  -59.6933  -57.2357  49.8444  44.1056 
-57.8334  59.6063  60.3079  -59.1852  -56.6365  -49.2706  -43.5538 
-37.6082  -39.6347  -39.6647  38.4396  34.9498  -26.6984  -21.9614 
37.2886  39.0565  -38.8722  -37.5427  -33.969  25.9074  21.7712 
-61.972  -63.0513  63.5082  -62.2337  59.7711  -54.2189  -51.6613 
-60.5783  -61.6254  -61.9812  -60.6696  58.066  -52.4656  -49.9653", header = T) 

sapply(1:(ncol(data)-2), function(x) {c(sum(data[c(which.min(data[,x])),x:(x+2)]), 
             sum(data[c(which.max(data[,x])),x:(x+2)]))}) 

      [,1]  [,2]  [,3]  [,4]  [,5] 
[1,] -210.2416 -212.057 -210.6385 -202.3894 -190.6133 
[2,] -62.4796 60.729 61.0456 46.6910 -46.1091 

第一行min,第二行max。

+0

这看起来是正确的,但是在找到列中的最小值和最大值之后,是否可以不管负值还是负值执行运行求和(累计求和)行? – Juvin 2015-01-22 03:28:02

minsum <- c() 
maxsum <- c() 

temp <- matrix(sample(c(-1,1),replace=T)*70*runif(70), ncol=7) 
for(i in 1:(ncol(temp)-2)){ 
    tmin <- which.min(temp[,i]) 
    tmax <- which.max(temp[,i]) 

    minsum <- c(minsum, temp[tmin,i+1] + temp[tmin,i + 2]) 
    maxsum <- c(maxsum, temp[tmax,i+1] + temp[tmax,i + 2]) 
    } 
+3

如果你知道结果向量将会是多长时间(你在这里做的),如果你先分配内存(而不是用'x 2015-01-20 22:30:15

+0

该代码减去行中的负数,for exapmle如果最小值为-100,并且对应的行为+20,则输出为-80,是否有可能无论符号如何,以累加方式将行累加到明智行 – Juvin 2015-01-22 04:04:49

+0

是的,我不知道我理解你的问题,但你可以改变minsum 2015-01-22 21:36:25