答案 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)