【问题标题】:How to rank data frame columns如何对数据框列进行排名
【发布时间】:2013-10-10 10:34:29
【问题描述】:

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

我想测试两个变量之间的相关性,因为关键是要测试你发布的越多,你打开的线程就越多 - 加上变量不是正态分布的,我选择了 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

欢迎任何帮助!

最好, 西蒙娜

【问题讨论】:

  • 查看“rank”函数:apply(data, 2, rank) or sappl(data, rank)

标签: r correlation rank


【解决方案1】:

根据 droopy 的 cmets,您可以尝试以下操作:

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() 创建了高尔夫风格的排名,排名越低越好。我对倒数进行了排名,这似乎给出了您要求的结果。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2020-04-23
    • 2018-07-10
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2016-09-05
    相关资源
    最近更新 更多