为每个有序列dfr创建向量

为每个有序列dfr创建向量,r,R,我有一个df: red<- c(21,4,6,4) blue<- c(45,65,2,4) black<- c(7,34,1,60) df<- data.frame(red, blue, black) row.names(df)<- c('a','b','c','d') 我已尝试在第一列中这样做: z<-numeric(0) for (i in 1)){ j<-order(df[,i], decreasing = TRUE) n<-names(

我有一个df:

red<- c(21,4,6,4)
blue<- c(45,65,2,4)
black<- c(7,34,1,60)
df<- data.frame(red, blue, black)
row.names(df)<- c('a','b','c','d')
我已尝试在第一列中这样做:

z<-numeric(0)
for (i in 1)){

j<-order(df[,i], decreasing = TRUE)
n<-names(df)[i]
z<-paste(n,k)}

z我们可以使用
lappy
对单个列进行
排序
,并将输出的
列表
分配回原始数据集

df[] <- lapply(df, sort, decreasing = TRUE)
如果打算创建多个对象(不推荐)

或者可以简化

list2env(lapply(df, function(x)
        row.names(df)[order(x, decreasing = TRUE)]), .GlobalEnv)
或使用
tidyverse

library(dplyr)
library(tibble)
library(tidyr)
rownames_to_column(df, 'rn') %>% 
  pivot_longer(cols = -rn) %>% 
  arrange(name, desc(value)) %>%
  {split(.$rn, .$name)} %>% 
  list2env(.GlobalEnv)

或者,如果需要输出每个新对象的值

list2env(lapply(df, sort, decreasing = TRUE), .GlobalEnv)
red
#[1] 21  6  4  4
blue
#[1] 65 45  4  2
black
#[1] 60 34  7  1

或者将
for
循环与
分配一起使用

for(nm in names(df)) assign(nm, sort(df[[nm]], decreasing = TRUE))

dplyr
中,可以使用

df %>%
   mutate_all(sort, decreasing = TRUE)

对不起,我应该说得更清楚些,因为行名很重要。e、 g.df[]@zoe您在帖子中的期望值是
red=21,6,4,4
,这就是它给出的结果。请检查
列表2env(lapply(df,sort,discreating=TRUE),.GlobalEnv)
@zoe无论如何,我不想在这个bcz上花费更多时间,我没有得到对你帖子下面评论的回复,原始df a=21表示红色,45表示蓝色,7表示黑色。b=4表示红色,65表示蓝色,34表示黑色。我想保留行名称和列名之间的关系。我想在每个列上循环并创建一个有序行名称的向量。e、 红色=a,c,b,d,蓝色=b,a,d,c。我如何“接受”答案?我对我使用的每一个答案都投“赞成票”
list2env(lapply(df, sort, decreasing = TRUE), .GlobalEnv)
red
#[1] 21  6  4  4
blue
#[1] 65 45  4  2
black
#[1] 60 34  7  1
for(nm in names(df)) assign(nm, sort(df[[nm]], decreasing = TRUE))
df %>%
   mutate_all(sort, decreasing = TRUE)