在保留原始重复行的同时,通过多个变量重新整形长到宽

时间:2018-04-17 13:29:12

标签: r

我有这个问题可能是重塑或合并的问题。

id = c(rep(1,5), rep(2,5))
type = factor(c(1L, 1L, 2L, 2L, 2L,  2L, 2L, 1L, 1L, 1L),
              labels = c('pay','inv'))
lett = c('a', 'b', 'a_inv','a_inv', 'b_inv', 'c', 'c', 'd', 'd', NA)
numb = c(30, 30, -10, -20, -30, -20, -20,  20, 20, NA)
abs_numb = abs(numb)

test = data.frame(id, type, lett, numb, abs_numb)
test

   id type  lett numb abs_numb
1   1  pay     a   30       30
2   1  pay     b   30       30
3   1  inv a_inv  -10       10
4   1  inv a_inv  -20       20
5   1  inv b_inv  -30       30
6   2  inv     c  -20       20
7   2  inv     c  -20       20
8   2  pay     d   20       20
9   2  pay     d   20       20
10  2  pay  <NA>   NA       NA

我想将这个长表重新整理成一个宽表,由idabs_numb汇总,并由type分隔。像这样:

  id abs_numb numb_inv numb_pay  lett_pay  lett_inv
  1       30  -30         30        b         b_inv
  1       10  -10         NA        NA        a_inv
  1       20  -20         NA        NA        a_inv
  1       30   NA         30        a         NA
  2       20  -20         20        d         c
  2       20  -20         20        d         c
  2       NA   NA         NA        <NA>      <NA>

我在数据集中有两个重复的行(id == 2, abs_numb == 20),如果我对此进行聚合,它将只返回一行。但是我需要在宽数据集中保留两者以进行计数。如果我首先根据type == paytype == inv拆分数据集然后合并到idabs_numb,那么当我只需要两行时,它将返回四行。

我的数据集有点大,所以我想知道是否有一种有效的方法来实现这一目标。 提前谢谢!

0 个答案:

没有答案