2016-05-06 2 views
1

Для примера dataframe:Обобщить/изменить данные в R

df <- structure(list(id = 1:18, region = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("a", 
"b"), class = "factor"), age.cat = structure(c(1L, 1L, 2L, 2L, 
2L, 3L, 3L, 4L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L, 4L), .Label = c("0-18", 
"19-35", "36-50", "50+"), class = "factor")), .Names = c("id", 
"region", "age.cat"), class = "data.frame", row.names = c(NA, 
-18L)) 

Я хочу, чтобы изменить данные, как описано ниже:

region 0-18 19-35 36-50 50+ 
a  2 3  2  1 
b  4 2  1  3 

ли я просто агрегат или изменить данные? Любая помощь приветствуется.

ответ

2

Использование reshape2:

install.packages('reshape2') 
library(reshape2) 

df1 <- melt(df, measure.vars = 'age.cat') 
df1 <- dcast(df1, region ~ value) 
6

Вы можете сделать это только с помощью table:

table(df$region, df$age.cat) 

    0-18 19-35 36-50 50+ 
    a 2  3  2 1 
    b 4  2  1 3 
+0

только (второстепенный) вопрос здесь имя столбца для 'области' потеряется. –