Как я могу объединить данные в один? - PullRequest
0 голосов
/ 15 января 2019

у меня данные выглядят так

1.1.1.1     Alcohol dehydrogenase.
1.1.1.2     Alcohol dehydrogenase (NADP(+)).
1.1.1.3     Homoserine dehydrogenase.
1.1.1.4     (R,R)-butanediol dehydrogenase.
1.1.1.5     Transferred entry: 1.1.1.303 and 1.1.1.304.
1.1.1.6     Glycerol dehydrogenase.
1.1.1.7     Propanediol-phosphate dehydrogenase.
1.1.1.8     Glycerol-3-phosphate dehydrogenase (NAD(+)).
1.1.1.9     D-xylulose reductase.
1.1.1.10    L-xylulose reductase.

Я загружаю его с read.table, как это

df <- read.table("path to data", header=F, fill=T)

и я получаю следующие данные

df <- structure(list(V1 = structure(c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
10L, 2L), .Label = c("1.1.1.1", "1.1.1.10", "1.1.1.2", "1.1.1.3", 
"1.1.1.4", "1.1.1.5", "1.1.1.6", "1.1.1.7", "1.1.1.8", "1.1.1.9"
), class = "factor"), V2 = structure(c(2L, 2L, 6L, 1L, 9L, 4L, 
8L, 5L, 3L, 7L), .Label = c("(R,R)-butanediol dehydrogenase.", 
"Alcohol", "D-xylulose", "Glycerol", "Glycerol-3-phosphate", 
"Homoserine", "L-xylulose", "Propanediol-phosphate", "Transferred"
), class = "factor"), V3 = structure(c(3L, 2L, 3L, 1L, 4L, 3L, 
3L, 2L, 5L, 5L), .Label = c("", "dehydrogenase", "dehydrogenase.", 
"entry:", "reductase."), class = "factor"), V4 = structure(c(1L, 
3L, 1L, 1L, 4L, 1L, 1L, 2L, 1L, 1L), .Label = c("", "(NAD(+)).", 
"(NADP(+)).", "1.1.1.303"), class = "factor"), V5 = structure(c(1L, 
1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L), .Label = c("", "and"), class = "factor"), 
    V6 = structure(c(1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L), .Label = c("", 
    "1.1.1.304."), class = "factor")), class = "data.frame", row.names = c(NA, 
-10L))

Я использую fill = T, потому что, если я этого не сделаю, это выдаст мне ошибку

df <- read.table("path/example.txt", header=F, fill=F)
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
  line 1 did not have 6 elements

Есть ли способ загрузить данные и иметь два столбца? или свести данные вместе, чтобы у меня было два столбца в R?

Обратите внимание, что я могу сделать это с read.delim, но это создаст проблему с другим кодом, который я использую

мой вывод желаний похож на

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Не красиво, но вот возможное решение:

# seperator is multi-space, but not possible in R
file_data <- "1.1.1.1     Alcohol dehydrogenase.
1.1.1.2     Alcohol dehydrogenase (NADP(+)).
1.1.1.3     Homoserine dehydrogenase.
1.1.1.4     (R,R)-butanediol dehydrogenase.
1.1.1.5     Transferred entry: 1.1.1.303 and 1.1.1.304.
1.1.1.6     Glycerol dehydrogenase.
1.1.1.7     Propanediol-phosphate dehydrogenase.
1.1.1.8     Glycerol-3-phosphate dehydrogenase (NAD(+)).
1.1.1.9     D-xylulose reductase.
1.1.1.10    L-xylulose reductase."

# change sep from 4 spaces to \t, which is identifiable. 
# replace textConnection(file_data) with your data file name
read_text <- readLines(textConnection(file_data ))
altered_text <- gsub("    ", "\t", read_text)

# parsing from altered text
df <- read.delim(textConnection(altered_text), header=FALSE, sep="\t", fill=TRUE)
df

Проблема в том, что ваш разделитель содержит более одного символа (http://r.789695.n4.nabble.com/multiple-separators-in-sep-argument-for-read-table-td856567.html).

В качестве альтернативы можно было бы изменить предварительную загрузку даты, чтобы иметь общий разделитель между столбцами. В противном случае считайте данные, как вы уже сделали, и добавьте шаг данных, чтобы объединить столбцы от 2 до 1 столбца, например. используя paste.

0 голосов
/ 15 января 2019

Используя базу R, вы можете использовать Reduce() с paste(), а затем обрезать пробелы с помощью trimws() для получения еще одного data.frame:

df2 <- data.frame(V1 = df[1], V2 = trimws(Reduce(paste, df[-1])))

> df2
         V1                                           V2
1   1.1.1.1                       Alcohol dehydrogenase.
2   1.1.1.2             Alcohol dehydrogenase (NADP(+)).
3   1.1.1.3                    Homoserine dehydrogenase.
4   1.1.1.4              (R,R)-butanediol dehydrogenase.
5   1.1.1.5  Transferred entry: 1.1.1.303 and 1.1.1.304.
6   1.1.1.6                      Glycerol dehydrogenase.
7   1.1.1.7         Propanediol-phosphate dehydrogenase.
8   1.1.1.8 Glycerol-3-phosphate dehydrogenase (NAD(+)).
9   1.1.1.9                        D-xylulose reductase.
10 1.1.1.10                        L-xylulose reductase.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...