我有一个类似于-的数据框
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
我想创建一个数据框列表,其中每个数据框都按A
或B
或C
排序,并且结果数据框包含列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
但是我在如何获取所需的列上陷入困境。
答案 0 :(得分:3)
我们可以使用map
遍历列名'A','B','C',用select
和arrange
({{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