Объединение и инвертирование нескольких файлов с отсутствующими данными в R - PullRequest
1 голос
/ 22 февраля 2012

У меня есть несколько файлов с разделенными табуляцией данными, которые выглядят следующим образом:

A 25
B 50
C 10
D 30

Я хотел бы инвертировать и объединить их.Таким образом, это выглядит так:

filename A B C D
file1 25 50 10 30
file2 20 15 0 10
file3 60 20 30 0

Как видите, в некоторых файлах отсутствуют данные (в file2 отсутствует значение для C, поэтому в этом файле нет строки C).Я хотел бы, чтобы все отсутствующие столбцы отображались как 0.

Я пытался использовать data = lapply (filelist, read.table, sep = "\ t"), но это просто дает мне:

data
[[1]]
         V1      V2
1         C   27660
2         B       4
3         E   40128
4         D    4584
5         G   43078

[[2]]
         V1      V2
1         C   31530
2         E   47978
3         D    5268
4         G   54636

Что не то, что я хочу.Я хочу, чтобы буквы были столбцами, а строки - именами файлов.

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Вы можете добавить имя файла в новый столбец data.frames, объединить их и изменить результат.

# Not run:
# data <- lapply(filelist, read.table, sep = "\t") 
# names(d) <- filelist

# Use sample data instead
d <- list(
  file1 = data.frame( V1 = sample(LETTERS, 10), V2 = rpois(10,10) ),
  file2 = data.frame( V1 = sample(LETTERS, 10), V2 = rpois(10,10) ),
  file3 = data.frame( V1 = sample(LETTERS, 10), V2 = rpois(10,10) )
)

# Add the file name as a column
for(i in names(d)) {
  d[[i]] <- data.frame( file=i, d[[i]] )
}

# Concatenate everything
d <- do.call(rbind, d)

# Convert to wide format
library(reshape2)
dcast(d, file ~ V1, fill=0 )
0 голосов
/ 22 февраля 2012

Вы, вероятно, можете использовать функцию rbind.fill() пакета plyr.По сути, вы читаете в своих файлах, транспонируете их с помощью t(), а затем используете rbind.fill, чтобы объединить их все в один большой фрейм данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...