所以,我有以下矩阵m:
[,1] [,2] [,3] [,4] [,5]
v1 0 1 2 3 3
v2 1 1 NaN 4 4
v3 2 2 2 3 4
v4 NaN 3 3 4 5
v5 4 NaN 4 5 5
我需要消除具有NaN的列(和行)。 我发现了几种简单的方法,例如:
m[,!is.nan(colSums(m))]
列,但我想使用apply。
我尝试使用此(sol 1):
m[,!is.nan(apply(m,1,sum))]
但它显示了前两列。
我终于想出了这个(sol 2):
m2[,!as.logical(colSums(-apply(m2, 2, is.nan)))]
但我认为解决方案并不那么优雅。
有没有办法缩短它? 另外,为什么我的第一个解决方案不起作用?
答案 0 :(得分:1)
要练习apply
个功能,请记住逗号位置很重要。
m[,!is.nan(apply(m, 2, sum))]
[,1] [,2]
v1 3 3
v2 4 4
v3 3 4
v4 4 5
v5 5 5
m[!is.nan(apply(m, 1, sum)),]
[,1] [,2] [,3] [,4] [,5]
v1 0 1 2 3 3
v3 2 2 2 3 4
答案 1 :(得分:0)
m[!is.na(rowSums(m)),!is.na(colSums(m))]
答案 2 :(得分:0)
无需求和
m <- matrix(c(
0, 1, 2, 3, 3,
1, 1, NaN, 4, 4,
2, 2, 2, 3, 4,
NaN, 3, 3, 4, 5,
4, NaN, 4, 5, 5), 5, byrow=TRUE)
m[!apply(is.na(m),1,any), !apply(is.na(m),2,any)]
或(如果您想要其他结果)is.nan()
代替is.na()