Always always always do a summary (thing) if something is unexpected.
> summary(df)
charCol floatCol intCol
a:1 1.5 :1 10 :1
b:1 -3.4:1 3 :1
c:1 3.9 :1 4 :1
d:1 NULL:1 NULL:1
which looks a little strange. Expand:
> summary(df$floatCol)
1.5 -3.4 3.9 NULL
1 1 1 1
What the hell is this?
> class(df$floatCol)
[1] "factor"
( "NULL" ) R ", , , ( )".
na.string = "NULL", , NA - , NULL R. NA , NULL . :
> c(1,2,3,NULL,4)
[1] 1 2 3 4
> c(1,2,3,NA,4)
[1] 1 2 3 NA 4
, is.na(foo)