如果包含 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 NA
s.
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)), ]
假设我们在 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 NA
s.
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)), ]