我在这些帖子上查找了答案,但没有一个在我的案例中工作:
R change all columns of type factor to numeric,
http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-do-I-convert-factors-to-numeric_003f,
How to convert a data frame column to numeric type?
我正在使用我导入的数据框(8600 x 168):
originaldf2<-read.csv("Occupanyrate_Train")
。除前三列外,所有列均为数值。导入后,许多列都是类factor
。我需要在数字类中使用3到168之间的所有列进行分析。这些列中有许多空值和“ - ”,我通过这样做转换为NA:
originaldf2[originaldf2=="-"]=NA
originaldf2[originaldf2==""]=NA
。这些列只包含十进制数,整数和NA。我尝试使用以下命令将所有变量转换为数字类:
originaldf2<-as.numeric(as.character(originaldf2[ , 4:168]))
我收到错误:Warning message: NAs introduced by coercion
我的数据框本身变得很奇怪:
str(originaldf2)
num [1:165] NA NA NA NA NA NA NA NA NA NA ...
我也尝试过:as.numeric(levels(originaldf2))[as.integer(originaldf2)]
尝试强制整个数据帧,但我收到错误Error: (list) object cannot be coerced to type 'integer'
然后我注意到有未使用的级别可能是原因,所以我删除了未使用的级别:originaldf2<-str(drop.levels(originaldf2))
并试图再次强制但仍然没有发生!这是df(10 x 12)的一个子集:
Property_ID Month Zipcode Occupancy_Rate.Response.Variable. VAR_1 VAR_2 VAR_3
1 A3FF8CD6 13-Jan 30064 0.93 468 10 0.7142857
2 A3FF8CD6 13-Feb 30064 0.93 468 10 0.7142857
3 A3FF8CD6 13-Mar 30064 0.94 468 10 0.7142857
4 A3FF8CD6 13-Apr 30064 0.96 468 10 0.7142857
5 A3FF8CD6 13-May 30064 0.953 468 10 0.7142857
6 A3FF8CD6 13-Jun 30064 0.93 468 10 0.7142857
7 A3FF8CD6 13-Jul 30064 0.925 468 10 0.7142857
8 A3FF8CD6 13-Aug 30064 0.925 468 10 0.7142857
9 A3FF8CD6 13-Sep 30064 0.95 468 10 0.7142857
10 A3FF8CD6 13-Oct 30064 0.945 468 10 0.7142857
11 A3FF8CD6 13-Nov 30064 0.9 NA <NA> NA
12 A3FF8CD6 13-Dec 30064 0.945 NA <NA> NA
VAR_4 VAR_5 VAR_6
1 0.5714286 0.8 0.75
2 0.5714286 0.8 0.75
3 0.5714286 0.8 0.75
4 0.5714286 0.8 0.75
5 0.5714286 0.8 0.75
6 0.5714286 0.8 0.75
7 0.5714286 0.8 0.75
8 0.5714286 0.8 0.75
9 0.5714286 0.8 0.75
10 0.5714286 0.8 0.75
11 NA NA NA
12 NA NA NA
答案 0 :(得分:4)
使用stringsAsFactors
的建议只会让你到目前为止。看起来您可能也想使用colClasses。它会将所需的列强制转换为数字并创建适当的NA。
originaldf <- read.csv( file_name,
colClasses=c(rep( "character",3), rep("numeric", 6) ) )
这也使大型数据帧的输入更快(更多,更快),因为用于猜测类的逻辑被绕过了。
答案 1 :(得分:1)
在阅读时使用na.strings
参数将-
转换为NA
:
x <- read.csv(na.strings=c('-'),
text="a,b,c
0,,
-,1,2")
x
a b c
1 0 NA NA
2 NA 1 2
空值在数字列中自动转换为NA
。 -
值强制将列解释为factor
。
答案 2 :(得分:0)
绝对在stringsAsFactors = FALSE
语句中使用read.csv
。它会工作。