R - заполнение ячейки значением из предыдущего столбца - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть такой фрейм данных

x <- c(1, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0)
y <- c(10:20)
dat <- rbind(x, y)

Я не хочу, чтобы строка X содержала 0.Вместо этого я хотел бы заменить 0 на значение из самого последнего ненулевого столбца.

Ожидаемый результат:

1    1    1    1    2    2    2    3    3     3     3
10   11   12   13   14   15   16   17   18    19    20

Это похоже на найденное решение здесь , но работает по столбцам, а не по строкам.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вот вариант с tidyverse, где мы транспонируем данные и используем fill для всех столбцов, транспонируем их обратно

library(tidyverse)
dat %>%
     t %>% 
     as.data.frame %>% 
     na_if(., 0) %>% 
     fill(!!! rlang::syms(names(.))) %>%
     t
0 голосов
/ 26 ноября 2018

шаг 1: заменить все нули на NA, потому что, ...

dat[1, dat[1,] == 0] <- NA

шаг 2: ... затем вы можете использовать функцию, котораяособенноразработан, чтобы делать то, что вы хотите с NA -значениями

dat[1, ] <- zoo::na.locf(unlist(dat[1,]))

# dat[1, ] <- zoo::na.locf(dat[1, ]) 

результат:

#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
#x    1    1    1    1    2    2    2    3    3     3     3
#y   10   11   12   13   14   15   16   17   18    19    20

Поскольку ваш пример был matrix и вы, возможно,data.frame для ваших реальных данных.Убедитесь, что ?unlist ваш data.frame-row в векторе, поэтому zoo::na.locf может функционировать как вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...