Преобразовать NA в 0

мои данные (тип S4) выглядят так:

      > rowData(ds_res1$res)
DataFrame with 144 rows and 4 columns
                                       cluster_id marker_id     p_val     p_adj
                                         <factor>  <factor> <numeric> <numeric>
B cells                  B cells                      OXO40  0.831005  0.996855
Activated Monocytes      Activated Monocytes          OXO40  0.664675  0.996855
NK cells CD56neg         NK cells CD56neg             OXO40  0.759837  0.996855
Unconventional monocytes Unconventional monocytes     OXO40  0.418055  0.996855
NK cells                 NK cells                     OXO40  0.709280  0.996855
...                                           ...       ...       ...       ...
Naïve CD4                              Naïve CD4      TIGIT        NA        NA
Memory CD9                             Memory CD9     TIGIT        NA        NA
gdT cells                              gdT cells      TIGIT        NA        NA
Undefined3                             Undefined3     TIGIT        NA        NA
Monocytes                              Monocytes      TIGIT  0.971238  0.996855

Я пытаюсь преобразовать значения NA в кадре данных в 0, и у меня есть следующие ошибки с двумя разными подходами:

      > rowData(ds_res1$res)[is.na(rowData(ds_res1$res))] <- 0
Error in mergeROWS(x, i, value) : appending gaps is not supported
In addition: Warning messages:
1: In NSBS(i, x, exact = exact, strict.upper.bound = !allow.append,  :
  subscript is an array, passing it thru as.vector() first
2: In NSBS(i, x, exact = exact, strict.upper.bound = !allow.append,  :
  subscript is an array, passing it thru as.vector() first

> rowData(ds_res1$res)[is.na(rowData(ds_res1$res)),] <- 0
Error in normarg_mcols(value, class(x), length(x)) : 
  trying to set metadata columns of length 575 on an object of length 144
In addition: Warning messages:
1: In NSBS(i, x, exact = exact, strict.upper.bound = !allow.append,  :
  subscript is an array, passing it thru as.vector() first
2: In NSBS(i, x, exact = exact, strict.upper.bound = !allow.append,  :
  subscript is an array, passing it thru as.vector() first
3: In `[<-.factor`(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L,  :
  invalid factor level, NA generated
4: In `[<-.factor`(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,  :
  invalid factor level, NA generated

2 ответа

Не зная, чтоrowDataили как оно определено, я предполагаю, что у него нет сопутствующей функции назначения LHS`rowData<-`. (Например,rownames(dat)имеет`rownames<-`чтобы мы могли сделатьrownames(dat) <- c("a","quux").)

В этом случае, если вы хотите исправитьNAs в данных, возвращенных с вашегоrowData(..)позвони, тогда

      dat <- rowData(ds_res1$res)
dat[] <- lapply(dat, function(z) { z[is.na(z)] <- 0; z; })

Хотя нет никаких намеков на то, что вы используетеdplyr, если бы вы были, то каноническая функцияdplyr::coalesce, который можно использовать как:

      dat[] <- lapply(dat, dplyr::coalesce, 0)

Используя dplyr, вы можете сделать таким образом:

      ds_res|>
mutate(column_in_which_replace_na = ifelse(is.na(column_in_which_replace_na),0,column_in_which_replace_na))
Другие вопросы по тегам