R不转换为数字

R不转换为数字,r,type-conversion,R,Type Conversion,我有一个从制表符分隔的文件导入的信息矩阵。导入此数据后,我将其合并到数据框中,并对其执行一些编辑以使其可用 最后一步是将所有数字转换为数字。为了做到这一点,我使用 as.numeric(as.character())。不幸的是,数字并没有变为数字。它们仍然是chr类型。 这是我的密码: stringsAsFactors=F filelist <- list.files(path="C:\\Users\\LocalAdmin\\Desktop\\Correlation Project\

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

最后一步是将所有数字转换为数字。为了做到这一点,我使用 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]))
} 
TSVnew<-apply(TSV,2,as.numeric)
rownames(TSVnew)<-rownames(TSV)
TSV<-TSVnew
stringsAsFactors=F
文件列表您可以使用

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

TSV这里有几件事:

尽可能使用向量运算

无需读取for循环中的文件

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

TSV@JPC我终于成功地让它工作了。这是我的密码:

   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]))
} 
TSVnew<-apply(TSV,2,as.numeric)
rownames(TSVnew)<-rownames(TSV)
TSV<-TSVnew

tsvneween即使使用您的代码,如果没有实际数据,我们也很难知道发生了什么。
类(TSV[,1])
的输出是什么?如果您可以发布
dput(head(TSV[,1]))
的输出,这也会很有用-它可以让我们重新创建一小块TSV对象。请制作一个可复制的示例并删除所有不需要的内容。还有,为什么要使用for循环?@EDi我会清理代码并上传另一个版本。我使用for循环遍历数据库,并删除任何以“b”、“a”、“l”或“u”开头的列。我这样做是因为这些列包含我不需要的信息。结果数据框基本上是第一列上的几个名称,其余的列只是十进制数。这是您请求的输出:结构(c(“-1.26”、“-1.94”、“-1.79”、“-1.55”、“1.45”),.Names=c(“S9_Z”、“S4_Y”、“H4_X”、“H_O”、“L461_L”、“H4_Z”。我将编写一些代码来清理所有非数字项,并让您知道这是否有效。谢谢!感谢您的帮助,该代码使我的脚本更加高效。但是,TSV的所有元素都是“chr”类型。我尝试使用sapply(TSV,as.numeric)转换这些元素这是我的TSV数据框:chr[1:54,1:3]“-1.26”“-1.94”“0.50”“-1.79”“0.55”“1.45”“-3.74”“-1.85”“1.35”“-attr(*,”“dimnames”)=2$:chr[1:54]“S42_Y”“h46x”“H46”…$:chr[1:3]“862421862738”我不知道所有列的chr位置,所以我想保存这些类,然后能够查找哪些列的integer/factor位置并相应地转换为numeric。我没有两次查找列类型,而是将其保存为变量。嗯……不将它们转换为numeric是什么意思?失败了吗?它们仍然是charac吗ter?它引入了NAs吗?太酷了。我不知道你可以这么做。它们都保留为字符,好像我从未尝试过转换它们一样。不过我找到了一个解决方案!Pl。检查我在这个线程上的答案。谢谢!
for(i in seq(1,ncol(TSV),1))
{
    TSV[,i] <- as.numeric(as.character(TSV[,i]))
}