我从csv文件中读取数据.如果我在R中看到这个文件,我有:
  V1 V2  V3 V4  V5 V6 V7
1 14 25  83 64 987 45 78
2 15 65 789 32  14 NA NA
3 14 67  89 14  NA NA NA
如果我想要每列中的最大值,我使用这个:
apply(df,2,max)
这就是结果:
 V1  V2  V3  V4  V5  V6  V7 
 15  67 789  64  NA  NA  NA 
但它适用于没有的列NA.如何更改我的代码,以及比较列NA?
day*_*yne 27
您只需添加na.rm=TRUE到您的申请电话.
apply(df,2,max,na.rm=TRUE)
注意:这确实假设每列至少有一个数据点.如果一个人不sum回来0.
基于评论的编辑
fft没有na.rm争论.因此,您需要编写自己的函数.
apply(df,2,function(x){fft(x[!is.na(x)])})
例如:
df <- data.frame(matrix(5,5,5))
df[,3] <- NA
> df
  X1 X2 X3 X4 X5
1  5  5 NA  5  5
2  5  5 NA  5  5
3  5  5 NA  5  5
4  5  5 NA  5  5
5  5  5 NA  5  5
> apply(df,2,function(x){fft(x[!is.na(x)])})
$X1
[1] 2.500000e+01+0i 1.776357e-15+0i 1.776357e-15+0i 1.776357e-15+0i
[5] 1.776357e-15+0i
$X2
[1] 2.500000e+01+0i 1.776357e-15+0i 1.776357e-15+0i 1.776357e-15+0i
[5] 1.776357e-15+0i
$X3
complex(0)
$X4
[1] 2.500000e+01+0i 1.776357e-15+0i 1.776357e-15+0i 1.776357e-15+0i
[5] 1.776357e-15+0i
$X5
[1] 2.500000e+01+0i 1.776357e-15+0i 1.776357e-15+0i 1.776357e-15+0i
[5] 1.776357e-15+0i
另外一个选项:
sapply(apply(df,2,na.exclude), fft)
编辑:如果apply()返回矩阵而不是列表,上面的代码可能会失败.如果没有NA例如,这将会发生.下面的代码修复了:
sapply(tapply(m, col(m), na.exclude), max)
有趣的是,没有必要设置simplify=FALSE,因为tapply()只有在na.exclude()每列返回单个标量时才会简化; 在这种情况下sapply以相同的方式工作.