2013-09-19 3 views
6

Это может показаться очень простым вопросом R, но я был бы признателен за ответ. У меня есть кадр данных в виде:Частота кадров в R

col1 col2 
a g 
a h 
a g 
b i 
b g 
b h 
c i 

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

a b c 
g 2 1 0 
h 1 1 0 
i 0 1 1 

Как это сделать в R?

+4

вы пробовали это: 'таблица (ДФ $ column1 Д.Ф. $ column2)' –

+0

Это должен быть поставлен на удержании под * мутноватый, что вы спрашиваете * пока вы не добавите какие код, который вы пытались, и, возможно, более подробную информацию о структуре ваших данных. –

ответ

8

Я не совсем уверен, что вы использовали, но table отлично работает для меня!

Вот минимальный воспроизводимый пример:

df <- structure(list(V1 = c("a", "a", "a", "b", "b", "b", "c"), 
        V2 = c("g", "h", "g", "i", "g", "h", "i")), 
       .Names = c("V1", "V2"), class = "data.frame", 
       row.names = c(NA, -7L)) 
table(df) 
# V2 
# V1 g h i 
# a 2 1 0 
# b 1 1 1 
# c 0 0 1 

Примечания:

  • Попробуйте table(df[c(2, 1)]) (или table(df$V2, df$V1)), чтобы поменять местами строки и столбцы.
  • Используйте as.data.frame.matrix(table(df)), чтобы получить data.frame в качестве вашего вывода. (as.data.frame создаст длинный data.frame, а не тот, который вам нужен в том же формате).
+1

Или 'table (df $ V1, df $ V2)' – csgillespie

+1

@csgillespie, но мне нравится, когда вы используете 'table' напрямую, вы получаете дополнительные метки из имен переменных. Вы можете получить то же самое с вашим подходом, указав нужные имена (например: 'table (V1 = df $ V1, V2 = df $ V2)'), но мне нравится сохранять ввод, когда я могу :) – A5C1D2H2I1M1N2O1R2T1

+0

и используя '[ 'вы можете выбирать столбцы программно с переменными, хранящими имена колонок. – Michele

4

Использование f от @Ananda вы можете использовать dcast

library(reshape2) 

> dcast(f, V1~V2) 
Using V2 as value column: use value.var to override. 
Aggregation function missing: defaulting to length 
    V1 g h i 
1 a 2 1 0 
2 b 1 1 1 
3 c 0 0 1 

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

set.seed(1) 
f$var <- rnorm(7) 

> f 
    V1 V2  var 
1 a g -0.6264538 
2 a h 0.1836433 
3 a g -0.8356286 
4 b i 1.5952808 
5 b g 0.3295078 
6 b h -0.8204684 
7 c i 0.4874291 

> dcast(f, V1~V2, value.var="var", fun.aggregate=sum) 
    V1   g   h   i 
1 a -1.4620824 0.1836433 0.0000000 
2 b 0.3295078 -0.8204684 1.5952808 
3 c 0.0000000 0.0000000 0.4874291 
+0

Хорошее расширение базовой идеи. +1 – A5C1D2H2I1M1N2O1R2T1

Смежные вопросы