【发布时间】:2018-04-06 23:41:01
【问题描述】:
考虑以下示例:
Var_A <- sample(1:100,5,replace=TRUE)
Var_B <- sample(1:100,5,replace=TRUE)
Var_C <- sample(1:100,5,replace=TRUE)
Var_D <- sample(1:100,5,replace=TRUE)
DF <- as.data.frame(cbind(Var_A,Var_B,Var_C,Var_D))
在 R 中,已经存在用于查找元素最大值和最小值的函数,因此我可以轻松地创建一个新变量,该变量等于感兴趣的列中的最大值(或最小值):
> DF$Max <- pmax(Var_A,Var_B,Var_C,Var_D)
> DF
Var_A Var_B Var_C Var_D Max
1 44 33 6 72 72
2 29 66 51 12 66
3 35 29 47 79 79
4 39 79 47 65 79
5 97 60 36 81 97
但是如果我需要创建一个变量来捕获,例如,每行中的第二大值(即跨列)?
在我使用的真实数据集中,我有 600 多列和大约 2800 万条记录。我需要创建变量来识别和存储在查看每条记录的变量(列)时发现的最大、第二大、第三大等值,就像pmax 会做的那样,但对于其他序数。
我能够在功能上使其在数据子集上工作的唯一方法是执行一个循环,但如果我在整个数据集上运行它,那么该循环将不会在我的一生中完成。我也考虑过使用apply 函数,但我的理解是apply 会先将数据集转换为矩阵,我的数据集不会接受。
关于非循环方式的任何建议?有了这么多的数据,越快越好……
【问题讨论】:
-
行级操作往往很慢,尤其是对于 data.frames。如果您的所有列都是数字,则最好使用矩阵以提高速度。同样,您可以考虑转置数据并在列上运行此类查询。
标签: r