在R中更改数据框列的类别的最佳方法

3

再次提出一个看似简单的问题,但是……我在R中有这个名为“d1”的小数据框:

     [,1]    [,2]   
[1,] "SHY"   "75000"
[2,] "IGLIX"25000"

我想要做的就是将第二列中的字符转换为数字。经过一个小时的摆弄,我只能想到这个可行的方法:

a <- data.frame(d1[,1])
b <- data.frame(as.numeric(d1[,2]))
cbind(a, b)

这给了我:

  d1...1. as.numeric.d1...2..
1     SHY               75000
2   IGLIX               25000

当然有更简单的方法吧?我尝试了"apply"但没有成功。

9
@Ernie,你的小数据框d1是一个矩阵。它只能保存一种类别的数据。当有一个字符列时,所有其他列都会被转换为该列的类型。如果你只有两列,最好的选择是data.frame(Col1=d1[,1], Col2=as.numeric(d1[,2])) - undefined
@akrun 或许我的问题表述不准确。我正在使用以下代码从两个列表中形成d1:do.call(rbind, c(da, db))。我似乎无法将列表da或db的第二个元素强制转换为数字,我认为这将解决我的问题。 - undefined
@akrun,你能看一下这个吗?https://dev59.com/c43da4cB1Zd3GeqPuAeh - undefined
2个回答

2
如果矩阵中有多列,您可以一次性完成所有操作,并在同一时间将列转换为适当的类型。
## set up a matrix
m <- matrix(c("SHY", "75000", "IGLIX", "25000"), 2, byrow=TRUE)
## split by column, convert types, and make data frame
data.frame(
    lapply(split(m, col(m)), type.convert, as.is = TRUE),
    stringsAsFactors = FALSE
)
#      X1    X2
# 1   SHY 75000
# 2 IGLIX 25000
type.convert() 可以将字符向量转换为适当的逻辑、整数、数值、复数或因子类型,因此我们需要使用 stringsAsFactors=FALSE 来再次获取第一列中的字符。

太棒了!解决了这个问题,还解决了与此问题相关的另一个问题!谢谢! - undefined

0

@akrun的答案解决了这个问题:

data.frame(Col1= d1[,1], Col2=as.numeric(d1[,2]))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接