如果包含 R 中的字符,则删除行

Delete row if contains character in R

假设我们在 df 中有一列主要包含数值,但有几行是字符:

row1 <- c(2, 3, 5, 1, 0) 
row2 <- c(5, 2, "char", "word", 10) 
df <- data.frame(row1, row2) 
> df
row1  row2
2      5
5      char
1      word
3      2
0      10

如何删除整个 df 中包含 row2 中的字符的行,这样最终的 df 应该如下所示:

> df
row1  row2
2      5
3      2
0      10

试试这个:

df[!is.na(as.numeric(as.character(df$row2))),]  


df[!is.na(as.numeric(df$row2)),]  

已编辑:添加没有 as.character 的解决方案(在@markus 评论之后)

library(tidyverse)
df |>
  filter(!is.na(as.numeric(row2)))

我只是想在这里提供更完整的答案,以便您了解如何解决这个问题。

使用您的向量 row2,我们可以使用 as.numeric() 函数将该数据从字符类型强制转换为数字类型。 R 会尽其所能——将 "2""5" 强制转换为数字很容易,但 R 不知道如何处理 "word""char" 所以它会return NAs.

as.numeric(row2)

is.na() 函数然后可以 return 一个逻辑向量,说明每个元素是否是一个 NA 值。

is.na(as.numeric(row2))

可以通过添加 ! 作为前缀来反转该逻辑。

!is.na(as.numeric(row2))

最后,该逻辑向量可用于对数据结构进行子集化。

row2[!is.na(as.numeric(row2))]
df[!is.na(as.numeric(df$row2)), ]