【发布时间】:2014-10-23 00:07:12
【问题描述】:
我需要将数据框中的每个值从字符转换为数字。 我写道:
y[,2:ncol(y)]<-sapply(y[,2:ncol(y)], as.numeric)
但是由于表很大(20000 列乘 3000 行)需要很多时间。 有没有办法更有效地做到这一点?谢谢
【问题讨论】:
-
你能避免将所有值变成因子的步骤吗?
dat[] <- lapply(dat, function(x) as.numeric(as.character(x)))对我来说只需要几秒钟,没有额外的开销。但是,如果您作为数据框读入或将矩阵强制转换为数据框,您可能可以避免此步骤 -
您可以通过使用
if语句避免对不必要的列进行此操作来加快速度。dat[] <- lapply(dat, function(x) if(is.factor(x)) as.numeric(as.character(x)) else x)。或者更好的办法是在lapply调用中只包含因子列dat[sapply(dat, is.factor)] -
所以你有 20,000 列,只有第一列不是数字?听起来您应该首先使用数字矩阵(请参阅
data.matrix)并将第一列保留在单独的向量中,如果有意义的话,可以将其用作矩阵的行名。
标签: r performance loops sapply