Преобразовать 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")
.)
В этом случае, если вы хотите исправитьNA
s в данных, возвращенных с вашего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))