来自 "scratch" 的 Wilcoxon 秩和检验函数
Wilcoxon Rank Sum Test function from "scratch"
我正在尝试生成一个函数,它将 return Wilcoxon 秩和检验的检验统计量(它用于 class,我知道有一个内置函数)
y=c(3,4,4,4,5,6,7)
total=c(x,y)
names=c(rep(c("X"), times = length(x)),rep(c("Y"), times = length(y)))
df=data.frame(names,total)```
df
names total
1 X 1
2 X 2
3 X 3
4 X 4
5 X 5
6 X 6
7 X 7
8 X 8
9 X 9
10 X 10
11 Y 3
12 Y 4
13 Y 4
14 Y 5
15 Y 6
16 Y 7
然后我按 "total" 列的降序排序,一旦排序我就对它们进行排名
newdf= df[order(total),]
rankdf=data.frame(newdf,rank=c(1:nrow(newdf)))
rankdf
names total rank
1 X 1 1
2 X 2 2
3 X 3 3
11 Y 3 4
4 X 4 5
12 Y 4 6
13 Y 4 7
5 X 5 8
14 Y 5 9
6 X 6 10
15 Y 6 11
7 X 7 12
16 Y 7 13
8 X 8 14
9 X 9 15
10 X 10 16
有没有一种方法可以检查 "total" 列中的哪些元素相同,并计算它们在 "rank" 列中相应值的平均值,然后将结果重新分配到行中,而无需丢失名称列。我期待这样的事情:
names total rank
1 X 1 1
2 X 2 2
3 X 3 3.5
11 Y 3 3.5
4 X 4 6
12 Y 4 6
13 Y 4 6
5 X 5 8.5
14 Y 5 8.5
6 X 6 10.5
15 Y 6 10.5
7 X 7 12.5
16 Y 7 12.5
8 X 8 14
9 X 9 15
10 X 10 16
我是 R 的新手。在此先感谢!
瓦尔
在wilcox.test
中使用了函数rank
,所以也可以这样做:
cbind(rankdf,w_rank=rank(rankdf$total))
names total rank w_rank
1 X 1 1 1.0
2 X 2 2 2.0
3 X 3 3 3.5
11 Y 3 4 3.5
4 X 4 5 6.5
12 Y 4 6 6.5
13 Y 4 7 6.5
14 Y 4 8 6.5
5 X 5 9 9.5
15 Y 5 10 9.5
6 X 6 11 11.5
16 Y 6 12 11.5
7 X 7 13 13.5
17 Y 7 14 13.5
8 X 8 15 15.0
9 X 9 16 16.0
10 X 10 17 17.0
我正在尝试生成一个函数,它将 return Wilcoxon 秩和检验的检验统计量(它用于 class,我知道有一个内置函数)
y=c(3,4,4,4,5,6,7)
total=c(x,y)
names=c(rep(c("X"), times = length(x)),rep(c("Y"), times = length(y)))
df=data.frame(names,total)```
df
names total
1 X 1
2 X 2
3 X 3
4 X 4
5 X 5
6 X 6
7 X 7
8 X 8
9 X 9
10 X 10
11 Y 3
12 Y 4
13 Y 4
14 Y 5
15 Y 6
16 Y 7
然后我按 "total" 列的降序排序,一旦排序我就对它们进行排名
newdf= df[order(total),]
rankdf=data.frame(newdf,rank=c(1:nrow(newdf)))
rankdf
names total rank
1 X 1 1
2 X 2 2
3 X 3 3
11 Y 3 4
4 X 4 5
12 Y 4 6
13 Y 4 7
5 X 5 8
14 Y 5 9
6 X 6 10
15 Y 6 11
7 X 7 12
16 Y 7 13
8 X 8 14
9 X 9 15
10 X 10 16
有没有一种方法可以检查 "total" 列中的哪些元素相同,并计算它们在 "rank" 列中相应值的平均值,然后将结果重新分配到行中,而无需丢失名称列。我期待这样的事情:
names total rank
1 X 1 1
2 X 2 2
3 X 3 3.5
11 Y 3 3.5
4 X 4 6
12 Y 4 6
13 Y 4 6
5 X 5 8.5
14 Y 5 8.5
6 X 6 10.5
15 Y 6 10.5
7 X 7 12.5
16 Y 7 12.5
8 X 8 14
9 X 9 15
10 X 10 16
我是 R 的新手。在此先感谢!
瓦尔
在wilcox.test
中使用了函数rank
,所以也可以这样做:
cbind(rankdf,w_rank=rank(rankdf$total))
names total rank w_rank
1 X 1 1 1.0
2 X 2 2 2.0
3 X 3 3 3.5
11 Y 3 4 3.5
4 X 4 5 6.5
12 Y 4 6 6.5
13 Y 4 7 6.5
14 Y 4 8 6.5
5 X 5 9 9.5
15 Y 5 10 9.5
6 X 6 11 11.5
16 Y 6 12 11.5
7 X 7 13 13.5
17 Y 7 14 13.5
8 X 8 15 15.0
9 X 9 16 16.0
10 X 10 17 17.0