переформатировать данные таблицы в другой путь в R - PullRequest
0 голосов
/ 17 января 2012

У меня есть текстовый файл (который может быть прочитан как датафрейм) со следующим свойством.

group <- c(1,1,1,1, 2,2,2, 3,3, 4,4,4,4)
name <- c("1_1", "1_2", "1_3", "1_4", "2_1", "2_2", "2_3", "3_1", "3_2", "4_1", "4_2", "4_3", "4_4")
distance <- c(0:3, 0:2, 0:1, 0:3)
mydf <- data.frame (group, name, distance)
mydf 
   group name distance
1      1  1_1        0
2      1  1_2        1
3      1  1_3        2
4      1  1_4        3
5      2  2_1        0
6      2  2_2        1
7      2  2_3        2
8      3  3_1        0
9      3  3_2        1
10     4  4_1        0
11     4  4_2        1
12     4  4_3        2
13     4  4_4        3

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

 group 1
  1_1        0
  1_2        1
  1_3        2
  1_4        3

   group 2
   2_1        0
   2_2        1
   2_3        2

  group 3
  3_1        0
  3_2        1

  group 4 
  4_1        0
  4_2        1
  4_3        2
  4_4        3

Как мне достичь этой цели? спасибо

1 Ответ

3 голосов
/ 17 января 2012

Я предполагаю, что отступ в ваших выходных данных не является обязательным;если это так, эти ответы должны быть адаптированы.Оба примера записывают в файл "file.txt".

Вот подход, использующий только базовые функции:

spt <- split(mydf, mydf$group)
sink("file.txt")
invisible(lapply(spt, function(DF) {
  cat("group ")
  cat(DF$group[1])
  cat("\n")
  write.table(DF[,-1], row.names=FALSE, col.names=FALSE, quote=FALSE)
  cat("\n")
}))
sink()

Вот аналогичный подход с использованием пакета plyr

library("plyr")
sink("file.txt")
d_ply(mydf, .(group), function(DF) {
  cat("group ")
  cat(DF$group[1])
  cat("\n")
  write.table(DF[,-1], row.names=FALSE, col.names=FALSE, quote=FALSE)
  cat("\n")
})
sink()

Оба они создают один и тот же файл:

group 1
1_1 0
1_2 1
1_3 2
1_4 3

group 2
2_1 0
2_2 1
2_3 2

group 3
3_1 0
3_2 1

group 4
4_1 0
4_2 1
4_3 2
4_4 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...