如何从 R 中列表的每个数据帧中获取最大值/最小值

how to get maximum/minimum values from each dataframe of a list in R

提问人:Kumar 提问时间:11/20/2022 最后编辑:Kumar 更新时间:11/20/2022 访问量:35

问:

我有一个包含多个数据帧的列表,比如 30,000,在每个数据帧中我有多列。包含三个 DataFrame 的示例列表如下

df1 <- data.frame(ID = c('a', 'a', 'a', 'a','a', 'a'), a = c('a','b','c','d','e','f'), b = 
c(0,1,2,3,0,5), c= c(11,3,2,4,0,'NA'), d=c(0,2,5,7,'NA',5), e = c(0,5,'NA',3,0,'NA'), f = 
c(14,7,4,3,'NA',7), g = c(1,2,3,4,5,6), h = c(10,2,13,4,5,6))

df2 <- data.frame(ID = c('b', 'b', 'b', 'b','b', 'b'), a = c('a','b','c','d','e','f'), b = 
c(0,1,2,3,0,5), c= c(11,3,2,4,0,'NA'), d=c(0,2,15,7,'NA',5), e = c(0,5,'NA',3,0,'NA'), f = 
c(14,7,4,3,'NA',7), g = c(1,2,3,4,5,6), h = c(10,2,13,4,5,6))

df3 <- data.frame(ID = c('c', 'c', 'c', 'c','c', 'c'), a = c('a','b','c','d','e','f'), b = 
c(0,1,2,3,0,5), c= c(11,3,2,4,0,'NA'), d=c(0,2,5,27,'NA',5), e = c(0,5,'NA',3,0,'NA'), f = 
c(14,7,4,3,'NA',7), g = c(1,2,3,4,5,6), h = c(10,2,13,4,5,6))

abc <- list (df1, df2, df3)

我想找出列表中每个数据帧的最大值。最终所需的输出应位于数据帧中,如下所示

abc <- 

ID   Max.Value
'a'    14
'b'    15
'c'    27

我尝试了以下代码

max(unlist(abc), na.rm = T)  

使用以下代码,我只得到最大值/最小值

sapply(abc, function(x) max(x[3:9], na.rm=TRUE))

但我正在寻找如上所述的所需输出

R 列表 帧数据 操作

评论


答:

0赞 SBMVNO 11/20/2022 #1

一个可能的答案是:

for (i in 1:length(abc))
{
  print(max( as.numeric(unlist(abc[[i]])), na.rm=TRUE))
}

或不带 DO 循环/包

  data.frame(
    ID=sapply(1:length(abc), FUN=function(x) abc[[x]][1,'ID']),
    Max.Value=sapply(1:length(abc), FUN= function(x)max( as.numeric(unlist(abc[[x]])), na.rm=TRUE)  )
  )
2赞 Onyambu 11/20/2022 #2
library(tidyverse)

bind_rows(abc)%>%
  group_by(ID)%>%
  type_convert()%>%
  summarise(max_value = max(across(where(is.numeric)), na.rm = TRUE))

# A tibble: 3 × 2
  ID    max_value
  <chr>     <dbl>
1 a            14
2 b            15
3 c            27