在数据框中,A列应为数字向量。
因此,如果列的条目具有任何非数字字符,我将删除相应的整行。
有没有人有解决方案?谢谢!
答案 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))