在r语言中的矩阵中symbol列显示为空白,但是用na.omit无法去除,提取空白的位置出来返回为“”,我要怎么删除这些带有空白的行呢

在r语言中的矩阵中symbol列显示为空白,但是用na.omit无法去除,提取空白的位置出来返回为“”,我要怎么删除这些带有空白的行呢

img

在R语言中,可以使用 gsub 函数替换矩阵中的空白符号,并使用 na.omit 函数删除带有替换后值为空字符串 "" 的行。具体步骤如下:

  1. 定义一个待处理的矩阵 mat,其中包含空白符号。

  2. 使用 gsub 函数替换空白符号为空字符串 "",然后将结果存储在新的矩阵 new_mat 中。

new_mat <- gsub("\\s+", "", mat)
  1. 用 na.omit 函数删除新矩阵 new_mat 中值为空字符串的行,并将结果存储在新的矩阵 clean_mat 中。
clean_mat <- na.omit(new_mat)

完成上述步骤后,clean_mat 中不应该有任何值为空字符串的行

完整代码:

# 定义待处理的矩阵,其中包含空白符号
mat <- matrix(c("a", "1", "", "b", "2", " ", "c", "3", "\t"), nrow=3)

# 使用 gsub 函数替换空白符号为空字符串,然后将结果存储在新的矩阵 new_mat 中
new_mat <- gsub("\\s+", "", mat)

# 使用 na.omit 函数删除 new_mat 中值为空字符串的行,并将结果存储在新的矩阵 clean_mat 中
clean_mat <- na.omit(new_mat)

# 打印 clean_mat,其中不应该有任何值为空字符串的行
print(clean_mat)

找了下,发现可以用NA值替代空白,然后去除就行了
ids1[ids1 == ""] <- NA,当然希望还有更好的方法

# 选择不包含空白值的行
keep_rows <- apply(mat, 1, function(x) all(!is.na(x) & x != ""))

# 将选择的行赋给原始矩阵
new <- mat[keep_rows, ]

如果需要同时去除 NA 值和空白值,可以将上述代码中的 !is.na(x) 改为 complete.cases(x)。