Удаление нулей без удаления всего ряда или столбца - R - PullRequest
0 голосов
/ 21 марта 2020

Есть ли способ заставить первый столбец начать с первого положительного значения? Предположим, у меня есть такие данные

enter image description here

, и я хочу, чтобы они выглядели так:

enter image description here

Очевидно, мои данные намного больше, и делать это вручную очень утомительно. Я искал об этом, но могу только найти способы удалить строки или столбцы на основе нулей.

1 Ответ

1 голос
/ 21 марта 2020

Вы можете исключить элементы, равные нулю, и адаптировать 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)
...