R:查找数据框中列的最大/最小值

时间:2016-08-03 16:44:52

标签: 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采用列名称的向量和列所在的数据框,并从这些列返回最大值。在这个例子中,它将返回向量:

(3,4,4)

提前致谢!

4 个答案:

答案 0 :(得分:2)

stdout:
piped output

conout:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est
laborum.
vec=c("C1" , "C2" ,"C3")

C1 C2 C3 C4 C5
1   2  3  4  5
1   4  3  5  6
3   2  4  1  3

df <- read.table(con<-file("clipboard"), header = T)
df

apply(df[,vec],2,max)

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 可能不在vec中,则可以df代替df[,colnames(df) %in% vec]

答案 1 :(得分:1)

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)

答案 2 :(得分:1)

我们可以在将数据集子集转换为colMaxs之后使用matrixStats中的matrix

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

答案 3 :(得分:0)

dat <- data.frame(a=c(1,2,3),b=c(2,3,4),c=c(3,4,5))
> dat
  a b c
1 1 2 3
2 2 3 4
3 3 4 5

> sapply(dat, max, na.rm = TRUE)
a b c 
3 4 5