Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将数据帧中的因子转换为整数_R_Integer_Dataframe_Text Files_R Factor - Fatal编程技术网

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