将向量按值绑定到数据帧列表

我有一个数据帧列表,我想向其附加一个向量(将向量的一个值附加到列表中的每个数据帧)。

我想选择向量的最小值并将其附加到列表中具有最高值stdev的数据帧中(同时保持列表的顺序)。下面是一个澄清的示例解决方案!

更新:数据框列表现在具有多列。

#Data
#list of dataframes
lst <- list(A = data.frame(stdev = 2,V1 = 2),B = data.frame(stdev = 6,V1 = 1),C = data.frame(stdev = 4,V1 = 4))
lst

#Vetor
vec <- c(10,5,11)
vec

我可以想到一个漫长而笨拙的解决方案,将列表转换为数据框,然后进行排序,绑定,重新排序,重命名.....太复杂了:

library(data.table)
library(tidyverse)

df <- rbindlist(lst,idcol = "df_name") %>% 
  mutate(original_order = 1:n()) %>% 
  arrange(desc(stdev)) %>% 
  mutate(vec = vec[order(vec)]) %>% 
  arrange(original_order)
df

names <- df$df_name
names
lst1 <- split(df,seq(nrow(df)))
names(lst1) <- names
lst1
lst2 <- lapply(lst1,select,-c(df_name,original_order))
lst2


$A
  stdev V1 vec
1     2  2  11

$B
  stdev V1 vec
2     6  1   5

$C
  stdev V1 vec
3     4  4  10

这最终给了我正确的结果,将向量的最大值附加到列表的最小值(按原始顺序),但是还有更优雅的解决方案吗?

更新:此解决方案归功于@akrun和@RonakShah(两个答案的合并):

vec <- sort(vec,decreasing = TRUE)
inds <- order(sapply(lst,"[[","stdev"))
Map(cbind,lst,vec = vec[order(inds)])

谢谢!

whyzywj 回答:将向量按值绑定到数据帧列表

我们可以使用Map

Map(cbind,lst[order(unlist(lst))],vec = vec[order(-vec)])[names(lst)]
#$A
#  stdev vec
#1     2  11

#$B
#  stdev vec
#1     6   5

#$C
#  stdev vec
#1     4  10

或基于数据更新的更新

Map(cbind,lst[order(unlist(lapply(lst,`[[`,"stdev")))],vec = vec[order(-vec)])[names(lst)]
#$A
#  stdev V1 vec
#1     2  2  11

#$B
#  stdev V1 vec
#1     6  1   5

#$C
#  stdev V1 vec
#1     4  4  10
,

我们可以从 func tabBarController(_ tabBarController: UITabBarController,didSelect viewController: UIViewController) { } 中提取>>> datetime.strptime("14.45.55","%H.%M.%S").time() datetime.time(14,45,55) 列,stdev,使用它来将lstorder重新排列为原始{{1} }使用vec

cbind
本文链接:https://www.f2er.com/3148307.html

大家都在问