Замените пустые ячейки в R последовательными значениями (R, циклы) - PullRequest
1 голос
/ 31 января 2020

У меня есть набор данных, df, один из столбцов содержит пустые значения, мне нужно, чтобы они были заполнены. Как заполнить пустые поля "" последовательными значениями? (У меня есть набор данных, который содержит более 10000 строк)

                   Subject Folder

                   hi      outlookdata
                   hi      outlookdata
                   hi      outlookdata
                           outlookdata
                           outlookdata
                   hello   outlookdata
                   hello   outlookdata
                           outlookdata
                           outlookdata 
                           outlookdata
                           outlookdata
                   hi      outlookdata

Это мой желаемый вывод:

                   Subject Folder

                   hi      outlookdata
                   hi      outlookdata
                   hi      outlookdata
                   a       outlookdata
                   a       outlookdata
                   hello   outlookdata
                   hello   outlookdata
                   b       outlookdata
                   b       outlookdata 
                   b       outlookdata
                   b       outlookdata
                   goodbye outlookdata 

Вот данные для моих данных:

 structure(list(Subject = structure(c(4L, 4L, 4L, 1L, 1L, 3L, 
 3L, 1L, 1L, 1L, 1L, 2L), .Label = c("", "goodbye", "hello", "hi"
 ), class = "factor"), Folder = structure(c(1L, 1L, 1L, 1L, 1L, 
 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "outlookdata", class = "factor")), class = "data.frame",     row.names = c(NA, 
-12L))

Я не был уверен, должен ли я использовать al oop?

   for (i in 1:nrow(df)){
          if(df$Subject[i]=="")({ 
          df$Subject[i]=df$Subject[i-1] 
        }
     }

Я хочу, чтобы значения, заменяющие "", были последовательными. Любое предложение полезно.

1 Ответ

2 голосов
/ 31 января 2020

Мы можем использовать rleid для этого. Столбец «Тема» был factor, поэтому он преобразуется в character, иначе для назначения новых значений потребуется либо изменить levels, добавив, либо снова вызвав factor. Преобразуйте в data.table (setDT), создайте вектор значений для замены ('nm1'). В dataest создайте новый столбец 'grp' с помощью rleid для 'Subject', затем сгруппируйте по 'grp ', если' Subject 'пустое (укажите его в i), тогда присвойте (j)' Subject 'в качестве значения из' nm1 ', соответствующего номеру c index, предоставленному .GRP и затем удалите «grp», присвоив NULL

library(data.table)
df1$Subject <- as.character(df1$Subject)
nm1 <- c(letters, do.call(paste0, expand.grid(letters, 1:1000)))
setDT(df1)[, grp := rleid(Subject)][Subject == "", 
      Subject := nm1[.GRP], grp][, grp := NULL][]
#    Subject      Folder
# 1:      hi outlookdata
# 2:      hi outlookdata
# 3:      hi outlookdata
# 4:       a outlookdata
# 5:       a outlookdata
# 6:   hello outlookdata
# 7:   hello outlookdata
# 8:       b outlookdata
# 9:       b outlookdata
#10:       b outlookdata
#11:       b outlookdata
#12: goodbye outlookdata
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...