首页 > 解决方案 > 类型列表时按列的最大值排序?

问题描述

我有以下df。

d<- data.frame (type=c("rna","rna","rna"), value = c(1,2,3) )
d2 <- data.frame (type=c("dna","dna"), value = c(20,30) )
d3 <- data.frame (type=c("protein","protein","protein"), value = c(-9.6,300, 1000) )
df <- rbind (d,d2,d3)

df$test = list ( c(0,12), 2, 3, 4,5,6,7, c(20,1) )

     type  value  test
1     rna    1.0 0, 12
2     rna    2.0     2
3     rna    3.0     3
4     dna   20.0     4
5     dna   30.0     5
6 protein   -9.6     6
7 protein  300.0     7
8 protein 1000.0 20, 1

我喜欢做的是将列测试从最高到最低排序。但是因为 test 是一个列表,所以我喜欢做的只是使用最大值。例如,第 1 行将使用值 12 和第 8 行按 20 排序。因此,如果我按第 8 行降序排列测试,则第 8 行将是第一行,然后是第 2 行,依此类推。当列是数字类型时,我可以排序,但当它是列表时,我可以排序,尤其是当每个元素中有多个值时。谢谢。

标签: rdplyr

解决方案


您可以使用sapply(..., max)从每个向量中提取最大值,然后按其排序:

df %>% arrange(desc(sapply(test, max)))

#     type  value  test
#1 protein 1000.0 20, 1
#2     rna    1.0 0, 12
#3 protein  300.0     7
#4 protein   -9.6     6
#5     dna   30.0     5
#6     dna   20.0     4
#7     rna    3.0     3
#8     rna    2.0     2

推荐阅读