创建数据框列表,每个列表在不同的列上排序

时间:2018-06-27 20:49:59

标签: r lapply

我有一个类似于-的数据框

 Name  State  A  B  C
  Tom     NY  4  2  5
 Dick     IL  8  1  3
Harry     WI  2  6  4
 John     MD  5  4  9

我想创建一个数据框列表,其中每个数据框都按ABC排序,并且结果数据框包含列Name,{ {1}},然后对该列进行排序。

State

我正在尝试使用lapply-

lst
 $`A`
 Name  State  A
 Dick     IL  8
  Tom     NY  4
 John     MD  5
Harry     WI  2

 $`B`
 Name  State  B
Harry     WI  6
 John     MD  4
  Tom     NY  2
 Dick     IL  1


 $`C`
 Name  State  C
 John     MD  9
  Tom     NY  5
Harry     WI  4
 Dick     IL  3

但是我在如何获取所需的列上陷入困境。

1 个答案:

答案 0 :(得分:3)

我们可以使用map遍历列名'A','B','C',用selectarrange({{1 }}在此使用)基于循环列以降序

arrange_at

以防万一,我们必须自动检查library(tidyverse) out <- map(LETTERS[1:3], ~ df1 %>% select(Name, State, .x) %>% arrange_at(.x, desc)) out #[[1]] # Name State A #1 Dick IL 8 #2 John MD 5 #3 Tom NY 4 #4 Harry WI 2 #[[2]] # Name State B #1 Harry WI 6 #2 John MD 4 #3 Tom NY 2 #4 Dick IL 1 #[[3]] # Name State C #1 John MD 9 #2 Tom NY 5 #3 Harry WI 4 #4 Dick IL 3 names(out) <- names(df1)[3:5] 列,然后使用numeric并提取名称

select_if

或使用df1 %>% select_if(is.numeric) %>% names %>% map(~ df1 %>% select(Name, State, .x) %>% arrange(desc(!! rlang::sym(.x)))) # another way to evaluate from symbol 中的lapply

base R