从数据框中删除包含特定列中的字符串的行

时间:2020-02-08 06:38:18

标签: r dataframe

所以我正在清理R中的一个巨大的数据文件,示例如下所示:

ID       Score
1001       4
1002       2
1003       h
1004       v
1005       3

因为“得分”列的类是“字符”,所以我想使用as.numeric函数将4,20和30转换为数值。但是由于数据很脏(包含h,v之类的不合理的字符串),所以我得到了消息:

NAs introduced by coercion.

当我运行以下命令时:

as.numeric(df$Score)

所以我现在要做的是删除包含字母字符串的数据框中的行,以便获得:

ID       Score
1001       4
1002       2
1005       3

2 个答案:

答案 0 :(得分:1)

您可以通过多种方式执行此操作:

转换为数字并删除NA

subset(df, !is.na(as.numeric(Score)))

#    ID Score
#1 1001     4
#2 1002    20
#5 1005    30

或使用grepl查找其中是否包含任何非数字字符并将其删除

subset(df, !grepl('\\D', Score))

这也可以通过grep完成。

df[grep('\\D', df$Score, invert = TRUE), ]

数据

df <- structure(list(ID = 1001:1005, Score = c("4", "20", "h", "v", 
"30")), class = "data.frame", row.names = c(NA, -5L))

答案 1 :(得分:0)

您可以在str_detect包中使用tidyverse,如下所示:

df[str_detect(df$Score, "\\d"),]

df %>% filter(str_detect(df$Score, "\\d"))

两者都产生输出:

#    ID Score
#1 1001     4
#2 1002    20
#5 1005    30

希望有帮助。