我需要分析实证研究数据。
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import * as io from 'socket.io-client';
@Injectable({
providedIn: 'root'
})
export class ChatService {
private url = 'http://localhost:8080';
private socket;
sendMessage(message) {
console.log("message sent");
this.socket.emit('chat.to.server', message);
}
getMessages(): Observable<any> {
let observable = new Observable(observer => {
this.socket = io(this.url);
this.socket.on('chat.to.client', (data) => {
observer.next(data);
});
return () => {
this.socket.disconnect();
};
})
return observable;
}
}
Question Fully agree (1) Agree (2) Neither(3) Disagree (4)
所以对于问题Q1,有7个人完全同意,有4个人完全同意,等等。
我必须计算所有问题的中位数。结果应如下所示:
Q1 7 3 2 5
Q2 10 7 0 0
Q3 4 3 3 7
Q4 15 0 2 0
Question Fully agree (1) Agree (2) Neither(3) Disagree (4) Median
对于问题Q1,有7个人回答“完全同意”,3个人回答“同意”,2个人回答“都不同意”,5个人回答“不同意”。我想计算问题Q1的答案中位数:“完全同意”等于数字1,“同意”为2,都不为3,不同意为4。因此,问题1的所有答案都是:1,1, 1,1,1,1,1,2,2,2,3,3,3,4,4,4,4,4。中位数为:2
对于Q2,它是:1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2。中位数是1
通常,我不使用Excel,因此所有功能对我来说都是新的。我已经尝试了几个小时的不同解决方案:例如VLOOKUP(Copy value N times in Excel)
不幸的是,到目前为止我还没有成功。也许有一个非常简单的解决方案来计算中位数:)。希望有一个不基于VPA的解决方案,因为我在这里的经验更少。 非常感谢您的帮助
答案 0 :(得分:2)
这是一个很有趣的方法,它包含一个非常简单的公式:
=MID(REPT(1,B3)&REPT(2,C3)&REPT(3,D3)&REPT(4,E3),SUM(B3:E3)/2,1)
请参阅“说明”列,其中显示了我如何构建一个由REPT(1,B3)&REPT(2,C3)&REPT(3,D3)&REPT(4,E3)
的所有值组成的字符串。然后,我要做的就是提取中间值,即MID(Explanation,Number of entries / 2, 1)
如果答案的数量为偶数,并且想拆分差值,则应该说中间点在2和3的值之间,则可以使用此数组输入的公式:
=AVERAGE(VALUE(MID(REPT(1,B3)&REPT(2,C3)&REPT(3,D3)&REPT(4,E3),SUM(B3:E3)/2+ISEVEN(SUM(B3:E3))*{0,1},1)))
答案 1 :(得分:2)
我选择将您的个位数分数重复到一个字符串中,并通过MID和一些数学方法得出中位数。
=IF(ISODD(SUM(B2:E2)),--MID(REPT(B$1,B2)&REPT(C$1,C2)&REPT(D$1,D2)&REPT(E$1,E2),CEILING.MATH(SUM(B2:E2)/2),1), AVERAGE(--MID(REPT(B$1,B2)&REPT(C$1,C2)&REPT(D$1,D2)&REPT(E$1,E2), SUM(B2:E2)/2,1), --MID(REPT(B$1,B2)&REPT(C$1,C2)&REPT(D$1,D2)&REPT(E$1,E2), SUM(B2:E2)/2+1,1)))
我使用了自定义数字格式,以便B1:E1中的分数可以保留为实数,但是如果您更喜欢真实的文本标签,则可以将数字硬编码到REPT函数中。
答案 2 :(得分:1)
这是您想要的吗?
F3: = SUM(B3:E3)/ 2
G3: = SUM($ B3:B3)
H3: = SUM($ B3:C3)
I3: = SUM($ B3:D3)
J3: = SUM($ B3:E3)
K3: = IFERROR(MATCH(F3,G3:J3,1)+1,1)
答案 3 :(得分:1)
只需:
=SUMPRODUCT({1,2,3,4},B2:E2)/SUM(B2:E2)
:)
编辑:
ups ...那是“平均”
我能够创建的最佳中位数解决方案是:
{=MEDIAN(IF(ROW(A1:INDEX(A:A,B2)),1),IF(ROW(A1:INDEX(A:A,C2)),2),IF(ROW(A1:INDEX(A:A,D2)),3),IF(ROW(A1:INDEX(A:A,E2)),4))}
但是它将“ 0”计为1:(
或
{=MEDIAN(IF(B3,IF(ROW(A2:INDEX(A:A,B3)),1)),IF(C3,IF(ROW(A2:INDEX(A:A,C3)),2)),IF(D3,IF(ROW(A2:INDEX(A:A,D3)),3)),IF(E3,IF(ROW(A2:INDEX(A:A,E3)),4)))}
但是它将每0计为0:(
好...这应该起作用:
{=MEDIAN(IF(B3,IF(ROW(A2:INDEX(A:A,B3)),1),{0,5}),IF(C3,IF(ROW(A2:INDEX(A:A,C3)),2),{0,5}),IF(D3,IF(ROW(A2:INDEX(A:A,D3)),3),{0,5}),IF(E3,IF(ROW(A2:INDEX(A:A,E3)),4),{0,5}))}