我对R很新,现在我希望你能帮助我。我有一个包含22个变量和超过50000行的数据集。为了进一步计算,我想选择每列中的前5个值并删除其他列。 我怎样才能做到这一点?
感谢您的帮助。
答案 0 :(得分:2)
你应该给我们一个可重复的例子。
我们可以使用apply
和sort
来完成此任务。假设dat
是原始数据框,dat2
是最终输出。
set.seed(123)
dat <- as.data.frame(matrix(rnorm(50), ncol = 5))
# V1 V2 V3 V4 V5
# 1 -0.56047565 1.2240818 -1.0678237 0.42646422 -0.69470698
# 2 -0.23017749 0.3598138 -0.2179749 -0.29507148 -0.20791728
# 3 1.55870831 0.4007715 -1.0260044 0.89512566 -1.26539635
# 4 0.07050839 0.1106827 -0.7288912 0.87813349 2.16895597
# 5 0.12928774 -0.5558411 -0.6250393 0.82158108 1.20796200
# 6 1.71506499 1.7869131 -1.6866933 0.68864025 -1.12310858
# 7 0.46091621 0.4978505 0.8377870 0.55391765 -0.40288484
# 8 -1.26506123 -1.9666172 0.1533731 -0.06191171 -0.46665535
# 9 -0.68685285 0.7013559 -1.1381369 -0.30596266 0.77996512
# 10 -0.44566197 -0.4727914 1.2538149 -0.38047100 -0.08336907
dat2 <- as.data.frame(apply(dat, 2, function(x) sort(x, decreasing = TRUE)[1:5]))
dat2
# V1 V2 V3 V4 V5
# 1 1.71506499 1.7869131 1.2538149 0.8951257 2.16895597
# 2 1.55870831 1.2240818 0.8377870 0.8781335 1.20796200
# 3 0.46091621 0.7013559 0.1533731 0.8215811 0.77996512
# 4 0.12928774 0.4978505 -0.2179749 0.6886403 -0.08336907
# 5 0.07050839 0.4007715 -0.6250393 0.5539177 -0.20791728