将列类型转换为数字时更改值

aga*_*tha 23 r

我有一个上面格式的数据文件.
我把它加载到R中,并尝试使用dist列中的值绘制直方图,我得到错误"x必须是数字".因此我尝试更改格式.

> head(data)

    V1        V2
1 type gene_dist
2    A     64667
3    A     76486
4    A     97416
5    A     30876
6    A     88018

> summary(data)
    V1            V2     
 A   : 67   100    :  1  
 B   :122   100906 :  1  
 type:  1   102349 :  1  
            1033   :  1  
            10544  :  1  
            10745  :  1  
            (Other):184  
Run Code Online (Sandbox Code Playgroud)

我尝试使用列设置格式,sapply但值已更改:

> data[,2]<-sapply(data[,2],as.numeric)

> head(data)
    V1  V2
1 type 190
2    A 146
3    A 166
4    A 189

summary(data)
    V1            V2        
 A   : 67   Min.   :  1.00  
 B   :122   1st Qu.: 48.25  
 type:  1   Median : 95.50  
            Mean   : 95.50  
            3rd Qu.:142.75  
            Max.   :190.00 
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样?

Jam*_*mes 46

看起来你的第二列是一个因素.你as.character以前需要使用as.numeric.这是因为因子在内部存储为带有表的整数,以给出因子级别标签.只是使用as.numeric将只给出内部整数代码.没有必要使用,sapply因为这些功能是矢量化的.

data[,2] <- as.numeric(as.character(data[,2]))
Run Code Online (Sandbox Code Playgroud)

列可能是一个因素,因为某些条目中存在一些非数字字符.任何此类条目都将转换为NA适当的警告,但您可能希望在原始数据中对此进行调查.

作为附注,data由于存在同名的基本函数,因此变量名称的选择很差(尽管不是无效).