gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:36:07 24 4
gpt4 key购买 nike

我有一个数据框类似于 -

 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 排序,生成的数据帧包含NameState 列和排序依据的列。

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

我正在尝试使用 lapply -

lst = lapply(df[sapply(df, is.numeric)], function(x){df[order(-x), ]})

但我对如何获得我想要的列感到困惑。

最佳答案

我们可以使用 map 遍历列名 'A'、'B'、'C',使用 select 对数据集的列进行子集化arrange(这里用的是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

或者使用 base R 中的 lapply

lapply(names(df1)[3:5], function(x) df1[order(-df1[[x]]), c("Name", "State", x)])

关于r - 创建数据框列表,每个数据框在不同的列上排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51071200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com