Reshaping data with count [duplicate]

2020-02-12 17:09发布

I have a dataset and I want to reshape it with package reshape2 from R, but I'm getting this error:

Aggregation function missing: defaulting to length

This is the head() of my data:

cat_one customer valor
cama        A     1
cama        B     1
cama        C     1
mesa        D     1
mesa        A     1
mesa        A     1

And I want to reshape it like this, with a count between both variables:

customer     cama    mesa
A             1       0
B             2      ...
C
D            ...     ...

This is my code:

dcast(dados_teste, cat_one ~ customer, value.var = 'valor')

And I'm following this other question, but the same solution is not working for me.

标签: r reshape2
1条回答
手持菜刀,她持情操
2楼-- · 2020-02-12 17:48

You've mixed up the LHS and RHS of the formula.

Try:

library(reshape2)
dcast(dados_teste, customer ~ cat_one, value.var = "valor")
# Aggregation function missing: defaulting to length
#   customer cama mesa
# 1        A    1    2
# 2        B    1    0
# 3        C    1    0
# 4        D    0    1

The "error" that you refer to is actually just a warning that tells you that it is just counting the number of values--not applying any other function. So, in this case, it's perfectly acceptable.

If you want to get rid of it, specify fun.aggregate = length.

dcast(dados_teste, customer ~ cat_one, 
      value.var = "valor", fun.aggregate = length)

If its just counts of two columns that you're after, you could also look at table:

as.data.frame.matrix(table(dados_teste[c(2, 1)]))
#   cama mesa
# A    1    2
# B    1    0
# C    1    0
# D    0    1
查看更多
登录 后发表回答