R:查找数据框中列列表的最大/最小值
假设我有一个列名称列表作为向量:R:查找数据框中列列表的最大/最小值,r,R,假设我有一个列名称列表作为向量: vec=c("C1" , "C2" ,"C3"). 我知道这些列名来自数据帧df: df: C1 C2 C3 C4 C5 1 2 3 4 5 1 4 3 5 6 3 2 4 1 3 我如何找到vec中每列的最大值,查看它们在df中的值。例如,类似于: boostedMax(vec, df, na.rm=T) 显然,这不起作用,但其思想是boostedMax获取列名称向量和列所在的数据帧,并从这些列返回最大值。在本例中,它将返
vec=c("C1" , "C2" ,"C3").
我知道这些列名来自数据帧df:
df:
C1 C2 C3 C4 C5
1 2 3 4 5
1 4 3 5 6
3 2 4 1 3
我如何找到vec中每列的最大值,查看它们在df中的值。例如,类似于:
boostedMax(vec, df, na.rm=T)
显然,这不起作用,但其思想是boostedMax获取列名称向量和列所在的数据帧,并从这些列返回最大值。在本例中,它将返回向量:
(3,4,4)
提前谢谢 dfdat-dat
df <- data.frame(a = c(1:4, NA), b = 6:10, c = 11:15)
d <- colnames(df)[1:2]
sapply(df[d], max, na.rm = TRUE)
a、b、c
1 1 2 3
2 2 3 4
3 3 4 5
>sapply(数据、最大值、na.rm=TRUE)
a、b、c
3 4 5
或
或
如果您认为某些级别的vec
可能不在df
中,您可以在%vec中执行df[,colnames(df)%
而不是df[,vec]
将数据集子集转换为矩阵后,我们可以使用colMaxs
来自矩阵状态的
library(matrixStats)
colMaxs(as.matrix(df[vec]))
#[1] 3 4 4
或者另一个选项是dplyr
library(dplyr)
df %>%
summarise_each_(funs(max), vec)
# C1 C2 C3
#1 3 4 4
编辑以提供示例数据帧。sapply(df[vec],max,na.rm=T)
提供示例数据时,最好将其复制/粘贴。您可以通过包含代码来创建数据帧,或者发布dput(df)
,apply
比sapply
更糟糕(Gregor的评论),因为它可能破坏排序,例如,如果您有混合的char和num列。嗯,结果证明我是错的。我原以为apply
会把事情搞砸,但不知何故它不会:DF=data.frame(a=c(2.2,11,1),b=c(“a”,“b”,“c”);应用(DF,2,max)
@RajRaina很高兴听到这个消息。如果您认为某些级别的vec
可能不在df
中,您可以在%vec中执行df[,colnames(df)%
C1 C2 C3
3 4 4
for(i in vec){
print(max(df[,i]))
}
[1] 3
[1] 4
[1] 4
sapply(df[,vec],max)
C1 C2 C3
3 4 4
library(matrixStats)
colMaxs(as.matrix(df[vec]))
#[1] 3 4 4
library(dplyr)
df %>%
summarise_each_(funs(max), vec)
# C1 C2 C3
#1 3 4 4