R 将数据帧中的因子转换为整数
我有以下代码R 将数据帧中的因子转换为整数,r,integer,dataframe,text-files,r-factor,R,Integer,Dataframe,Text Files,R Factor,我有以下代码 anna.table<-data.frame (anna1,anna2) write.table<-(anna.table, file="anna.file.txt",sep='\t', quote=FALSE) 等等 之后,我试图只获得符合某些标准的值,例如分数小于特定值 因此,我正在做以下工作 chr start end score chr2 41237927 41238801 151 chr1 369
anna.table<-data.frame (anna1,anna2)
write.table<-(anna.table, file="anna.file.txt",sep='\t', quote=FALSE)
等等
之后,我试图只获得符合某些标准的值,例如分数小于特定值
因此,我正在做以下工作
chr start end score
chr2 41237927 41238801 151
chr1 36976262 36977889 226
chr8 83023623 83025129 185
anna3<-"data/anna/anna.file.txt"
anna.total<-read.table(anna3,header=TRUE)
significant.anna<-subset(anna.total,score <=0.001)
Error: In Ops.factor(score, 0.001) <= not meaningful for factors
anna3<-"data/anna/anna.file.txt"
anna.total<-read.table(anna3,header=TRUE)
anna.total$score.new<-as.numeric (as.character(anna.total$score))
write.table(anna.total,file="peak.list.numeric.v3.txt",append = FALSE ,quote = FALSE,col.names =TRUE,row.names=FALSE, sep="\t")
anna.peaks<-subset(anna.total,fdr.new <=0.001)
Warning messages:
1: In Ops.factor(score, 0.001) : <= not meaningful for factors
anna3使用anna.table
(顺便说一句,它是一个数据帧,表是其他东西!),最简单的方法就是:
anna.table2 <- data.matrix(anna.table)
其他选项是强制所有因子变量为其整数级别。以下是一个例子:
## dummy data
set.seed(1)
dat <- data.frame(a = factor(sample(letters[1:3], 10, replace = TRUE)),
b = runif(10))
## sapply over `dat`, converting factor to numeric
dat2 <- sapply(dat, function(x) if(is.factor(x)) {
as.numeric(x)
} else {
x
})
dat2 <- data.frame(dat2) ## convert to a data frame
但是,请注意,仅当您需要底层数字表示时,上述操作才有效。如果你的因子基本上是数值级的,那么我们需要更巧妙地将因子转换为数值,同时保留在这些级别中编码的“数值”信息。以下是一个例子:
## dummy data
set.seed(1)
dat3 <- data.frame(a = factor(sample(1:3, 10, replace = TRUE), levels = 3:1),
b = runif(10))
## sapply over `dat3`, converting factor to numeric
dat4 <- sapply(dat3, function(x) if(is.factor(x)) {
as.numeric(as.character(x))
} else {
x
})
dat4 <- data.frame(dat4) ## convert to a data frame
如果我们只是将其转换为数字,那么当R转换底层代码时,我们会得到错误的数据
> as.numeric(dat3$a)
[1] 3 2 2 1 3 1 1 2 2 3
如果我们先将因子强制为字符向量,然后强制为数字向量,我们将保留原始信息,而不是R的内部表示
> as.numeric(as.character(dat3$a))
[1] 1 2 2 3 1 3 3 2 2 1
如果您的数据与第二个示例类似,那么您不能使用简单的data.matrix()
技巧,因为这与将as.numeric()
直接应用于系数相同,正如第二个示例所示,这不会保留原始信息。我知道这是一个较老的问题,但我也遇到了同样的问题,也许这会有所帮助:
在这种情况下,您的分数列似乎不应该成为因子列。这通常发生在read.table之后,当它是文本列时。根据您来自哪个国家,您可以使用“.”分隔浮动,而不是“.”。然后R认为这是一个字符列,并使其成为一个因素。在这种情况下,加文的答案将不起作用,因为R不会使“123456”变为123.456。您可以在文本编辑器中使用replace“,”with“.”轻松解决此问题。@Anna您编辑的问题与以前几乎相同。我的答案包括使用as.numeric()
。还有一个问题,我将相应地编辑我的答案。非常感谢……我如何使用as数字直接转换anna.total$分数?以下是正确的吗?new.score-查看我编辑的答案。我没有分数
或您的原始数据。很大程度上取决于文本文件的外观等以及您如何读取。是否可以从此处向您发送我文件的一部分以查看其外观?@Anna编辑您的问题,并包括dput(head(ann.total,n=10))的输出。
。然后,我们可以使用它来加载您在R会话中拥有的数据(好吧,值10行),或者使用dec=“,”
,读取中的数据,这就是该参数的作用。
> dat3$a
[1] 1 2 2 3 1 3 3 2 2 1
Levels: 3 2 1
> as.numeric(dat3$a)
[1] 3 2 2 1 3 1 1 2 2 3
> as.numeric(as.character(dat3$a))
[1] 1 2 2 3 1 3 3 2 2 1