我有这个问题可能是重塑或合并的问题。
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
我想将这个长表重新整理成一个宽表,由id
,abs_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 == pay
和type == inv
拆分数据集然后合并到id
和abs_numb
,那么当我只需要两行时,它将返回四行。
我的数据集有点大,所以我想知道是否有一种有效的方法来实现这一目标。 提前谢谢!