Как наложено на текст? - PullRequest
       9

Как наложено на текст?

0 голосов
/ 15 декабря 2011

Это, наверное, очень тривиальный вопрос ... У меня есть таблица, подобная этой:

tbl1 <- data.frame(rbind(
c("N1","G1","a"),
c("N1","G1","b"),
c("N1","G2","d"),
c("N2","G1","e"),
c("N2","G1","f"),
c("N2","G2","g")
))

Который я хочу преобразовать в это:

X1 | G1         | G2

N1 | c("a","b") | "d"

N2 | c("e","f") | "g"

Я думаю, что это направление, но что должно быть "?" быть установленным?

tbl2 <- data.frame(cast(tbl1,X1~X2, value="X3", ? ))

Спасибо за все вклады в [r] в Stack Overflow!

/ Chris

Ответы [ 2 ]

4 голосов
/ 15 декабря 2011

Другое решение

library(reshape2)
dcast(tbl1, X1 ~ X2, fun.aggregate= function(x) paste(x, collapse = ","))
3 голосов
/ 15 декабря 2011

Это на самом деле делает то, что вы просите, хотя печатная версия результатов на первый взгляд выглядит несколько странно. (Конечно, сложность его печати заключается в том, что это data.frame, в котором некоторые «ячейки» являются векторами с более чем одним элементом).

Особенно, если вам нужно это для информации, которая в нем содержится (а не для печатного объекта, который он производит), он все равно может хорошо служить вашим целям:

tbl2 <- with(tbl1, 
            tapply(as.character(X3), 
                   INDEX = list(X1, X2), 
                   FUN = I))
# Equivalently:    FUN = function(X) X))

# Examine the resulting data.frame
tbl2
#    G1          G2 
# N1 Character,2 "d"
# N2 Character,2 "g"

# Extract particular elements
tbl2[["N1", "G1"]]
# [1] "a" "b"

tbl2[["N2", "G2"]]
# [1] "g"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...