2014-02-09 2 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$position и rep$value должны быть numeric типа, rep$chrom и rep$label должны быть character типа.

+0

-1 для требовать, чтобы иметь data.frame, когда это, очевидно, матрица. – Roland

ответ

4

Как указано @Roland, у вас есть matrix, а не data.frame, и они имеют различные стандартные print методы. Придерживаясь matrix, вы можете установить quote = FALSE явно в print или вы можете использовать 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 

Кроме того, как вы выяснили, по своему усмотрению, превращая ваш matrix в data.frame делает котировки исчезают. A data.frame - это более подходящая структура для хранения ваших данных, если каждый столбец представляет собой другой тип данных (числовой, символ, коэффициент и т. Д.). Однако преобразование matrix в data.frame не заботится о преобразовании столбцов для вас автоматически. Вместо этого, вы можете использовать type.convert (который также используется при создании data.frame использованием read.table и семьи):

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)' (как есть) создаст факторы для каждого из ваших столбцов, что может быть или не быть тем, что вы хотите. Я дал опцию 'type.convert', если вы хотите реплицировать' read.table'. – 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' методы различны для data.frames и matrices, вот почему. – 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