gpt4 book ai didi

对多个数据帧进行排序并在 R 中对它们求和

转载 作者:行者123 更新时间:2023-12-04 11:11:40 43 4
gpt4 key购买 nike

我有 10 个数据帧,每个数据帧有 2 列,我将数据帧称为 a、b、c、d、e、f、g、h、i 和 j。
每个数据框中的第一列称为 s 表示序列,第二列称为 p 表示对应于每个序列的 p 值。 s 列包含所有 10 个数据帧中的相同序列,本质上唯一的区别在于 p 值。
下面是数据框 a 的简短版本,它有 600,000 行。

s       p
gtcg 0.06
gtcgg 0.05
gggaa 0.07
cttg 0.05
我想按 p 值对每个数据帧进行排名,最小的 p 值应该获得 1 的等级,相等的 p 值应该获得相同的等级。每个最终数据帧应采用以下格式:
    s       p_rank_a
gtcg 2
gtcgg 1
gggaa 3
cttg 1
我用它来做一个:

r<-rank(a$p)

cbind(a$s,r)


但我对循环不是很熟悉,我不知道如何自动执行此操作。最终,我想要一个包含 s 列的最终文件,在下一列中是每个特定序列的所有数据帧的所有等级的等级总和。
所以基本上是这样的:
s       ranksum_P_a-j
gtcg 34
gtcgg 5
gggaa 5009093
cttg 499
请帮助和感谢!

最佳答案

对于单个 data.frame,您可以在一行中完成,如下所示:
感谢@Arun 指出使用 as.numeric(factor(p))

library(data.table)
aDT <- data.table(a)[, p_rank := as.numeric(factor(p))]

我建议将所有 data.frames 保存在一个列表中,以便您可以轻松地迭代它们。
由于您的 date.frames 是字母,因此很容易收集其中的十个:
# collect them all
allOfThem <- lapply(letters[1:10], get, envir=.GlobalEnv)
# keep in mind you named an object `c`

# convert to DT and create the ranks
allOfThem <- lapply(allOfThem, function(x) data.table(x)[, p_rank := as.numeric(factor(p))])

单独说明:开始避免在 c 中命名对象“ R”和其他常用函数可能是个好习惯。 .否则,你会发现你会开始遇到许多“无法解释”的行为,在你打败了你的
靠在墙上一个小时试图调试它,你意识到你已经覆盖了一个函数的名称。这在我身上从未发生过:)

关于对多个数据帧进行排序并在 R 中对它们求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15723673/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com