我有一个数据文件,格式从上面开始。
我将其加载到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


我尝试使用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


有人知道为什么会这样吗?

最佳答案

看来您的第二列是一个因素。您需要在as.character之前使用as.numeric。这是因为因子在内部以整数形式存储在表格中,以提供因子级别标签。仅使用as.numeric只会给出内部整数代码。由于这些功能是矢量化的,因此无需使用sapply

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


由于某些条目中包含一些非数字字符,因此该列可能是一个因素。任何此类条目都会在适当的警告下转换为NA,但是您可能希望在原始数据中进行调查。

附带说明一下,对于变量名,data是较差的(尽管不是无效的)选择,因为存在相同名称的基函数。

关于r - 将列类型转换为数值时更改值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6328771/

10-12 17:12
查看更多