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
我是 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