R不转换为数字

时间:2013-12-12 20:03:40

标签: r type-conversion

我有一个信息矩阵,我从制表符分隔的文件中导入。导入这些数据后,我将其合并到一个数据框中,并对其进行一些编辑以使其可用。

最后一步是我将所有数字转换为数字。为了做到这一点,我使用 as.numeric(as.character())。不幸的是,这些数字不会改为数字。他们仍然是chr类型。 这是我的代码:

   stringsAsFactors=F
filelist <- list.files(path="C:\\Users\\LocalAdmin\\Desktop\\Correlation Project\\test", full.names=TRUE, recursive=FALSE)
temp <- data.frame()
TSV <- data.frame()
for (i in seq (1:length(filelist)))
{
    temp <- read.table(file=filelist[i],head=TRUE,sep="\t")
    TSV <- rbind(TSV,temp)
}


for (i in seq(15,1,-1))  #getting rid of extraneous dataframe entries
{
    TSV <- TSV[-i,] #deleting by row
}

for(i in seq(1,ncol(TSV),1))
{
    TSV[,i] <- as.numeric(as.character(TSV[,i]))
} 

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您可以使用

TSV <- as.data.frame(as.numeric(as.matrix(TSV)))

这只有在所有值都可以转换为数字时才有效。

答案 1 :(得分:0)

这里有几件事:

尽可能选择矢量操作

无需读取for循环中的文件

TSV<-do.call(rbind,lapply(filelist, read.delim))

你的循环去掉无关的信息可以简化为向量操作

TSV<-TSV[-(1:15),] 

我假设你得到了你想要的因子和整数数字

oldClasses<-sapply(TSV[1,],class)
int2numeric<-oldClasses == "integer"
factor2numeric<-oldClasses == "factor"

TSV[,int2numeric]<-as.numeric(TSV[,int2numeric])
TSV[,factor2numeric]<-as.numeric(as.character(TSV[,factor2numeric]))

你可以说可以将上面的2减少到1,但我认为这会使你的意图明确

应该是它

答案 2 :(得分:0)

@JPC我终于设法让这个工作了。这是我的代码:

TSVnew<-apply(TSV,2,as.numeric)
rownames(TSVnew)<-rownames(TSV)
TSV<-TSVnew

但是,我仍然不明白为什么我之前使用它的尝试不起作用:

for(i in seq(1,ncol(TSV),1))
{
    TSV[,i] <- as.numeric(as.character(TSV[,i]))
}