[英]Apply Min or Max function to arrays when NA exist in R
我有一个问题看起来很简单,但确实使我发疯。 我真的需要你的帮助。
首先让我们生成一些数据
a<-c(rep(1:2,2),NA,NA)
b<-c(rep(NA,3),3,4,NA)
df<-cbind(a,b)
表格如下:
a b
[1,] 1 NA
[2,] 2 NA
[3,] 1 NA
[4,] 2 3
[5,] NA 4
[6,] NA NA
现在,我需要第三列:
当a和b都不为NA时,返回两者中的最大值。
当其中之一不是NA时,返回非NA号
当它们均为NA时,返回NA。
总而言之,我正在寻找这样的结果:
a b c
[1,] 1 NA 1
[2,] 2 NA 2
[3,] 1 NA 1
[4,] 2 3 3
[5,] NA 4 4
[6,] NA NA NA
我试过df$c<-max(df$a,df$b)
,显然这不起作用并给我:
Error in df$a : $ operator is invalid for atomic vectors
有人可以帮我吗? 非常感谢你!!
您可以在将数据集(“ df”为“矩阵”)转换为“ data.frame”后尝试使用pmax
cbind(df, c=do.call(`pmax`, c(as.data.frame(df), list(na.rm=TRUE))))
# a b c
#[1,] 1 NA 1
#[2,] 2 NA 2
#[3,] 1 NA 1
#[4,] 2 3 3
#[5,] NA 4 4
#[6,] NA NA NA
如果您需要每一行的“最小值”值,请用pmin
替换pmax
。 要创建一个“ data.frame”,您可以使用
df <- data.frame(a, b)
cbind
将输出作为“矩阵”。 $
运算符不适用于'matrix',因此最好使用[
您还可以使用“常规” max
函数:
df <- cbind(df, c = apply(df, 1, function(x) ifelse(all(is.na(x)), NA, max(x, na.rm=T))))
df
# a b c
#[1,] 1 NA 1
#[2,] 2 NA 2
#[3,] 1 NA 1
#[4,] 2 3 3
#[5,] NA 4 4
#[6,] NA NA NA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.