删除零而不删除整行或整列 - R

Removing zeros without removing entire row or col - R

有没有办法让第一列从第一个正值开始? 假设我有这样的数据

我希望它看起来像这样:

显然我的数据要大得多,手动完成非常繁琐。我搜索过这个,但只能找到基于零删除行或列的方法。

您可以排除等于零的元素并按行调整 length

t(mapply(`length<-`, apply(m, 1, function(x) x[x != 0]), ncol(m)))
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    7    9    4   NA
# [2,]    3    6   NA   NA   NA
# [3,]    1    6    6    4    3
# [4,]    7   NA   NA   NA   NA
# [5,]    4    3    1    8   NA

如果你的数据是数据框,

d <- as.data.frame(m)

你可以这样做:

setNames(as.data.frame(t(mapply(`length<-`, apply(d, 1, function(x) x[x != 0]), ncol(d)))),
         names(d))
#   V1 V2 V3 V4 V5
# 1  1  7  9  4 NA
# 2  3  6 NA NA NA
# 3  1  6  6  4  3
# 4  7 NA NA NA NA
# 5  4  3  1  8 NA

数据

m <- matrix(c(0, 0, 1, 0, 0,
              1, 0, 6, 0, 4,
              7, 0, 6, 0, 3,
              9, 3, 4, 0, 1,
              4, 6, 3, 7, 8), 5)