提问人:Kumar 提问时间:11/20/2022 最后编辑:Kumar 更新时间:11/20/2022 访问量:35
如何从 R 中列表的每个数据帧中获取最大值/最小值
how to get maximum/minimum values from each dataframe of a list in R
问:
我有一个包含多个数据帧的列表,比如 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))
但我正在寻找如上所述的所需输出
答:
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
评论