2

我有一个数据框,其中包含用户列表的两个变量。这些变量代表每个用户打开的帖子数和线程数。

我想测试两个变量之间的相关性,因为重点是测试你发布的越多,你打开的线程越多——加上变量不是正态分布的,我选择了 Spearman 相关性以评估两个变量之间的关系。

为了做到这一点,我需要根据我的用户发表的帖子和线程的数量对他们进行排名,而我被困在了这一点上。我的数据集是一个数据框,例如:

> data
USER SUM(POSTS) SUM(THREADS)
u0          2            2
u1          4            2
u10        212          25
u100         7           1
u102       226          23
u103         1           1
u104         3           1
u105         7           1
u107       234          28

到目前为止,我尝试的是订购并找到重复值的平均值:

p<-ave(order(data[,2]), data[,2]) 
t<-ave(order(data[,3]), data[,3]) 

如果我的程序正确,我可能不会,我希望线程的排名如下:

4.5 4.5 2 7.5 3 7.5 7.5 7.5 1

但我的代码产生了这个排名:

5.500000 5.500000 6.000000 4.333333 1.000000 4.333333 5.000000 4.333333 9.000000

欢迎任何帮助!

最好的,西蒙娜

4

1 回答 1

2

根据下垂的评论,您可以尝试以下操作:

data[,-1] <- apply(data[,-1], 2, function (x) {rank(1/rank(x))})
data
# USER SUM.POSTS SUM.THREADS
# 1   u0       8.0         4.5
# 2   u1       6.0         4.5
# 3  u10       3.0         2.0
# 4 u100       4.5         7.5
# 5 u102       2.0         3.0
# 6 u103       9.0         7.5
# 7 u104       7.0         7.5
# 8 u105       4.5         7.5
# 9 u107       1.0         1.0

如您所见rank(),创建了高尔夫风格的排名,排名较低的排名较高。我对倒数进行了排名,这似乎给出了您要求的结果。希望这可以帮助。

于 2013-10-10T12:53:57.370 回答