删除R中一列中包含非数字字符的行

时间:2014-08-13 00:16:49

标签: r

在数据框中,A列应为数字向量。

因此,如果列的条目具有任何非数字字符,我将删除相应的整行。

有没有人有解决方案?谢谢!

3 个答案:

答案 0 :(得分:16)

将数据导入data.frame时,如果整个列不是数字,通常会将其转换为因子。考虑到这一点,您通常必须转换为字符然后转换为数字。

dat <- data.frame(A=c(letters[1:5],1:5))

str(dat)
'data.frame':   10 obs. of  1 variable:
 $ A: Factor w/ 10 levels "1","2","3","4",..: 6 7 8 9 10 1 2 3 4 5

as.numeric(as.character(dat$A))
 [1] NA NA NA NA NA  1  2  3  4  5
Warning message:
NAs introduced by coercion  

请注意,它会将字符转换为NA。结合这个:

dat <- dat[!is.na(as.numeric(as.character(dat$A))),]

简而言之,从因子转换为数字后,dat的行NA不是> dat <- data.frame(A=c(letters[1:5],1:5)) > dat <- dat[!is.na(as.numeric(as.character(dat$A))),] Warning message: In `[.data.frame`(dat, !is.na(as.numeric(as.character(dat$A))), : NAs introduced by coercion > dat <- dat[!is.na(as.numeric(as.character(dat$A))),] Error in dat$A : $ operator is invalid for atomic vectors

第二期:

{{1}}

答案 1 :(得分:3)

或使用@Brandon Bertelsen的示例数据

dat1 <- transform(dat[grep("^\\d+$", dat$A),,drop=F], A= as.numeric(as.character(A)))
dat1
#   A
#6  1
#7  2
#8  3
#9  4
#10 5

 str(dat1)
#'data.frame':  5 obs. of  1 variable:
#$ A: num  1 2 3 4 5

答案 2 :(得分:0)

您可以使用以下代码从非数字值创建数据框。

subset(df, grepl('^\\d+$', df$dfColumn))

您可以在代码中添加一个感叹号,以查看非数字值并确保要删除它们。如果某个列值由于其中存在空格(例如'143')而被检测为非数字值,那么值得删除该空格,而不是从您的列中删除该值。

    subset(df, !grepl('^\\d+$', df$dfColumn))