无循环地对数据帧进行排序

时间:2018-03-16 10:01:05

标签: r dataframe

我有一个由TDM创建的数据框。我想找到每个文档的前10个术语(列为rownames)(列为列标题)。如果没有R中的循环,有没有办法做到这一点? 例如,下表我想看到每列的前3个术语以及列中的术语及其值。

            X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16
will        10 18 19 36 27 53 21 17 15  59  15  21  35  19  30  27
poor         3 11  0  4  0  0  2  2  2   7   2   5   9   3   2   8
country     12 10  4  8  9  1  6 15  8  15   8  10   8   2  15   9
now          1 10  3  5  5  2  4  1  0   9   0   8   5   1  11   3

1 个答案:

答案 0 :(得分:3)

您可以使用apply对每列进行排序,并返回包含该列中前n个元素的命名向量的列表:

set.seed(1)

x <- replicate(3, rpois(5, 10))
rownames(x) <- letters[1:5]
colnames(x) <- paste0("X", seq_len(ncol(x)))
x
#>   X1 X2 X3
#> a  8 12  8
#> b 10 11  2
#> c  7  9  8
#> d 11 14 10
#> e 14 11  7

n <- 3
apply(x, 2, function(x) list(sort(x)[seq_len(n)]))
#> $X1
#> $X1[[1]]
#>  c  a  b 
#>  7  8 10 
#> 
#> 
#> $X2
#> $X2[[1]]
#>  c  b  e 
#>  9 11 11 
#> 
#> 
#> $X3
#> $X3[[1]]
#> b e a 
#> 2 7 8

reprex package(v0.2.0)创建于2018-03-16。