2014-02-09 36 views
3

刪除所有引號我有一個數據幀rep,看起來像這樣:從數據幀

> head(rep) 
    position chrom value label 
[1,] "17408" "chr1" "0" "miRNA" 
[2,] "17409" "chr1" "0" "miRNA" 
[3,] "17410" "chr1" "0" "miRNA" 
[4,] "17411" "chr1" "0" "miRNA" 
[5,] "17412" "chr1" "0" "miRNA" 
[6,] "17413" "chr1" "0" "miRNA" 

如何從所有元素刪除引號?

注:rep$positionrep$value應該是numeric類型,rep$chromrep$label應該是character類型。

+0

-1自稱有data.frame時,它顯然是一個矩陣。 – Roland

回答

4

正如@Roland指出,你有matrix,不是data.frame,而這些具有不同的默認print方法。堅持matrix,您可以在print中明確地設置quote = FALSE,或者您可以使用noquote

這是一個基本的例子:

## Sample data 
x <- matrix(c(17, "chr1", 0, "miRNA", 18, "chr1", 0, "miRNA"), nrow = 2, 
      byrow = TRUE, dimnames = list(
       NULL, c("position", "chrom", "value", "label"))) 

## Default printing 
x 
#  position chrom value label 
# [1,] "17"  "chr1" "0" "miRNA" 
# [2,] "18"  "chr1" "0" "miRNA" 

## Two options to make the quotes disappear 
print(x, quote = FALSE) 
#  position chrom value label 
# [1,] 17  chr1 0  miRNA 
# [2,] 18  chr1 0  miRNA 
noquote(x) 
#  position chrom value label 
# [1,] 17  chr1 0  miRNA 
# [2,] 18  chr1 0  miRNA 

而且,當你在你自己的,想通了轉換您matrixdata.frame使得報價消失。如果每列是不同類型的數據(數字,字符,因子等),則data.frame是一個更適合於保存數據的結構。但是,將matrix轉換爲data.frame不會自動爲您轉換列。相反,你可以利用type.convert(使用read.table和家人創造一個data.frame時也使用):

y <- data.frame(x, stringsAsFactors = FALSE) 
str(y) 
# 'data.frame': 2 obs. of 4 variables: 
# $ position: chr "17" "18" 
# $ chrom : chr "chr1" "chr1" 
# $ value : chr "0" "0" 
# $ label : chr "miRNA" "miRNA" 
y[] <- lapply(y, type.convert) 
str(y) 
# 'data.frame': 2 obs. of 4 variables: 
# $ position: int 17 18 
# $ chrom : Factor w/ 1 level "chr1": 1 1 
# $ value : int 0 0 
# $ label : Factor w/ 1 level "miRNA": 1 1 
y 
# position chrom value label 
# 1  17 chr1  0 miRNA 
# 2  18 chr1  0 miRNA 
+0

謝謝,這非常有幫助。我不確定單獨使用'rep < - data.frame(rep)'是否足夠。我希望我能給你更多的聲望點。 – biohazard

+0

@biohazard,取決於數據! 'data.frame(rep)'(按原樣)將爲您的每個列創建因素,這些列可能會或可能不是您想要的。如果你想複製'read.table'體驗,我給了'type.convert'選項。 – A5C1D2H2I1M1N2O1R2T1

2

我想我找到了答案。我擁有的不是一個data.frame,而是一個矩陣。將其轉換爲data.frame除掉了引號。我仍然不知道爲什麼,雖然....

rep <- data.frame(rep) 
> head(rep) 
    position chrom value label 
1 17408 chr1  0 miRNA 
2 17409 chr1  0 miRNA 
3 17410 chr1  0 miRNA 
4 17411 chr1  0 miRNA 
5 17412 chr1  0 miRNA 
6 17413 chr1  0 miRNA 
+0

對於數據框架和矩陣,'print'方法是不同的,這就是爲什麼。 – Roland

7

兩個步驟:1)擺脫引號的,2)相應轉換列:

數據

x <- read.table(text=' 
position chrom value label 
"\\"17408\\"" "\\"chr1\\"" "\\"0\\"" "\\"miRNA\\"" 
"\\"17409\\"" "\\"chr1\\"" "\\"0\\"" "\\"miRNA\\""' 
, header=T) 

1)擺脫引號

library(stringr) 
library(plyr) 

del <- colwise(function(x) str_replace_all(x, '\"', "")) 
x <- del(x) 

2)轉化列相應

num <- colwise(as.numeric)  
x[c(1,3)] <- num(x[c(1,3)]) 
x 

    position chrom value label 
1 17408 chr1  0 miRNA 
2 17409 chr1  0 miRNA