R 矩阵 NA 从细胞中移除

R matrix NA remove from cells

我是 R 的新手,我有一个项目,其中有一个 df,其中有很多 NA 值。 我的目标是从细胞中去除 NA-s。我的问题是我只找到了删除整行或整列的解决方案。

我的数据框看起来像:

  V1   V2   V3
1 1    2    NA
2 NA   1.1  NA
3 2.1  1    NA
4 3.4  NA   5

等等...

我的目标是得到这样的东西:

    V1    V2   V3
   1 1    2    
   2 1.1  
   3 2.1  1    
   4 3.4  5   

所以基本上我希望我所有的价值观都从同一个位置开始。如果 NA-s 走到尽头,这不是问题,我只需要它让一切都在彼此之下。

到目前为止,我尝试了 na.omit(), na.rm and complete.case,但似乎没有一个对我有帮助。

如有任何帮助,我们将不胜感激!

是否只是希望数据打印时使用空格而不是 NA,如果是,那么这样做:

tib <- tibble::tribble(
  ~V1,   ~V2,   ~V3,
1,    2,    NA,
NA,   1.1,  NA,
2.1,  1,    NA,
3.4, NA,   5) %>% as.data.frame()

tib %>% 
  mutate(across(everything(), 
                ~case_when(is.na(.x) ~ "", 
                           TRUE ~ as.character(.x)))) %>% 
  noquote(.)
#    V1  V2 V3
# 1   1   2   
# 2     1.1   
# 3 2.1   1   
# 4 3.4      5

否则,如果您想这样做以便 R 中的其他函数以某种方式忽略丢失的数据,那么这将不起作用。

根据定义,数据框是矩形数据形式,因此您不能删除单个单元格并仍然保留为数据框。在评论中,您指出将 NA 移动到行尾是一个可以接受的解决方案。

您可以使用以下代码将非 NA 值移动到每行的开头:

df <- data.frame(V1=c(1, NA, 2.1, 3.4), V2=c(2,1.1,1,NA), V3=c(NA,NA,NA,5))

df[] <- t(apply(df,1,function(x) c(x[!is.na(x)],x[is.na(x)])))

#Show output
df
#    V1 V2 V3
# 1 1.0  2 NA
# 2 1.1 NA NA
# 3 2.1  1 NA
# 4 3.4  5 NA