我有以下代码
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
所以我想这个问题是我的表有因素,而不是整数
我想,我的anna.total $得分是一个因素,我必须做出一个整数
如果我正确读取as.numeric可以解决我的问题
我读有关as.numeric功能,但我不明白我怎么可以使用它
因此,请你给我一些建议?
先感谢您
最好的问候安娜
PS:我尝试以下
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
再次我有同样的问题......
随着anna.table
(它是由方式的数据帧,表是另一回事!),最简单的方法将是只是做:
anna.table2 <- data.matrix(anna.table)
作为data.matrix()
将转换的因素对它们的基础数值(整数)的水平。 这将对于仅包含数字,整数,因子或可强制转换为数字其它变量的数据帧工作,但任意字符串(字符)将导致基质成为字符矩阵。
如果你想anna.table2
是一个数据帧,不作为矩阵,那么你可以做后续:
anna.table2 <- data.frame(anna.table2)
其他选项是强迫所有因素变量的整数水平。 下面是一个例子:
## 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
这使:
> str(dat)
'data.frame': 10 obs. of 2 variables:
$ a: Factor w/ 3 levels "a","b","c": 1 2 2 3 1 3 3 2 2 1
$ b: num 0.206 0.177 0.687 0.384 0.77 ...
> str(dat2)
'data.frame': 10 obs. of 2 variables:
$ a: num 1 2 2 3 1 3 3 2 2 1
$ b: num 0.206 0.177 0.687 0.384 0.77 ...
但是,请注意,如果你想底层的数字表示以上才有效。 如果你的因子基本上是数字的水平,那么我们需要在我们如何因素转换为数值,同时保留了“数字”信息的水平编码的比特聪明。 下面是一个例子:
## 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
注意我们需要做的as.character(x)
第一之前,我们做as.numeric()
我们将其转换成数字之前的额外调用编码级别的信息。 为了说明为什么这重要的,要注意什么dat3$a
是
> dat3$a
[1] 1 2 2 3 1 3 3 2 2 1
Levels: 3 2 1
如果我们仅仅将其转换成数字,我们得到了错误的数据为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认为是一个字符列,使得它的一个因素。 在那种情况下Gavins答案是行不通的,因为R将不会使“123456”,以123.456。 您可以轻松地修复与替代文本编辑器“”用“” 虽然。