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

时间:2020-03-21 16:19:53

标签: r row zero col

有什么方法可以使第一列从第一个正值开始? 假设我有这样的数据

enter image description here

我希望它看起来像这样:

enter image description here

很明显,我的数据要大得多,而且要手动进行非常繁琐。我已经对此进行了搜索,但是只能找到基于零删除行或列的方法。

1 个答案:

答案 0 :(得分:1)

您可以排除等于零的元素,并按行调整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)