我需要连接两个数据集,其中一个需要在R中进行修改。
数据集如下:
age_min age_max female male ID value date
18 24 0 1 10 324 2018-02-05
18 24 1 0 10 241 2018-02-05
18 24 1 1 10 152 2018-02-05
25 34 0 1 10 672 2018-02-05
25 34 1 0 10 580 2018-02-05
25 34 1 1 10 439 2018-02-05
35 44 0 1 10 523 2018-02-05
35 44 1 0 10 574 2018-02-05
35 44 1 1 10 678 2018-02-05
45 54 0 1 10 127 2018-02-05
45 54 1 0 10 756 2018-02-05
45 54 1 1 10 273 2018-02-05
55 64 0 1 10 xxx 2018-02-05
55 64 1 0 10 xxx 2018-02-05
55 64 1 1 10 xxx 2018-02-05
65+ NA 0 1 10 xxx 2018-02-05
65+ NA 1 0 10 xxx 2018-02-05
65+ NA 1 1 10 xxx 2018-02-05
18 24 0 1 10 123 2018-02-06
18 24 1 0 10 641 2018-02-06
18 24 1 1 10 901 2018-02-06
25 34 0 1 10 671 2018-02-06
25 34 1 0 10 421 2018-02-06
25 34 1 1 10 784 2018-02-06
35 44 0 1 10 856 2018-02-06
35 44 1 0 10 976 2018-02-06
35 44 1 1 10 1243 2018-02-06
45 54 0 1 10 745 2018-02-06
45 54 1 0 10 929 2018-02-06
45 54 1 1 10 781 2018-02-06
55 64 0 1 10 xxx 2018-02-06
55 64 1 0 10 xxx 2018-02-06
55 64 1 1 10 xxx 2018-02-06
65+ NA 0 1 10 xxx 2018-02-06
65+ NA 1 0 10 xxx 2018-02-06
65+ NA 1 1 10 xxx 2018-02-06
有许多不同的ID和日期,我想要得到的输出看起来像这样:
age_min age_max female male ID value date
18 24 0 1 10 324 2018-02-05
18 24 1 0 10 241 2018-02-05
18 24 1 1 10 152 2018-02-05
25 34 0 1 10 672 2018-02-05
25 34 1 0 10 580 2018-02-05
25 34 1 1 10 439 2018-02-05
35 44 0 1 10 523 2018-02-05
35 44 1 0 10 574 2018-02-05
35 44 1 1 10 678 2018-02-05
45 54 0 1 10 127 2018-02-05
45 54 1 0 10 756 2018-02-05
45 54 1 1 10 273 2018-02-05
55 64 0 1 10 xxx 2018-02-05
55 64 1 0 10 xxx 2018-02-05
55 64 1 1 10 xxx 2018-02-05
---------------------------------------------------------------------------
add 18 34 0 1 10 996 2018-02-05
18 34 1 0 10 821 2018-02-05
18 34 1 1 10 591 2018-02-05
18 44 0 1 10 1519 2018-02-05
18 44 1 0 10 1395 2018-02-05
18 44 1 1 10 1269 2018-02-05
18 54 0 1 10 xxxx 2018-02-05
18 54 1 0 10 xxxx 2018-02-05
18 54 1 1 10 xxxx 2018-02-05
18 65+ 0 1 10 xxxx 2018-02-05
18 65+ 1 0 10 xxxx 2018-02-05
18 65+ 1 1 10 xxxx 2018-02-05
---------------------------------------------------------------------------
18 24 0 1 10 123 2018-02-06
18 24 1 0 10 641 2018-02-06
18 24 1 1 10 901 2018-02-06
25 34 0 1 10 671 2018-02-06
25 34 1 0 10 421 2018-02-06
25 34 1 1 10 784 2018-02-06
35 44 0 1 10 856 2018-02-06
35 44 1 0 10 976 2018-02-06
35 44 1 1 10 1243 2018-02-06
45 54 0 1 10 745 2018-02-06
45 54 1 0 10 929 2018-02-06
45 54 1 1 10 781 2018-02-06
55 64 0 1 10 xxx 2018-02-06
55 64 1 0 10 xxx 2018-02-06
55 64 1 1 10 xxx 2018-02-06
---------------------------------------------------------------------------
add 18 34 0 1 10 794 2018-02-06
18 34 1 0 10 1062 2018-02-06
18 34 1 1 10 1685 2018-02-06
18 44 0 1 10 1650 2018-02-06
18 44 1 0 10 2038 2018-02-06
18 44 1 1 10 2928 2018-02-06
18 54 0 1 10 xxxx 2018-02-06
18 54 1 0 10 xxxx 2018-02-06
18 54 1 1 10 xxxx 2018-02-06
18 65+ 0 1 10 xxxx 2018-02-06
18 65+ 1 0 10 xxxx 2018-02-06
18 65+ 1 1 10 xxxx 2018-02-06
---------------------------------------------------------------------------
此示例来自一个ID,并且存在其他ID。
我想将18-24和25-34行的值相加以创建新的18-34行,将18-24、25-34、35-44行的值相加以创建18-44行,重复类似的步骤即可获得18-54、18-65 +。
我已经通过Jon Spring提供的代码实现了我想要的。问题是代码value = sum(value)将汇总所有年龄段的值。为了解决该问题,我删除了不想汇总的年龄段并计算18-34、18-44、18-54、18-65 +的总价值。乔恩,非常感谢您的帮助!
答案 0 :(得分:1)
df_summary <- df %>%
group_by(female, male, ID, date) %>%
summarize(age_min = min(age_min),
age_max = max(age_max),
value = sum(value))
df %>%
bind_rows(df_summary) %>%
arrange(date) # Edit to sort by date
以下是输出,它似乎与更新的OP匹配:
age_min age_max female male ID value date
1 18 24 0 1 10 324 2018-02-05
2 18 24 1 0 10 241 2018-02-05
3 18 24 1 1 10 152 2018-02-05
4 25 34 0 1 10 672 2018-02-05
5 25 34 1 0 10 580 2018-02-05
6 25 34 1 1 10 439 2018-02-05
7 18 34 0 1 10 996 2018-02-05
8 18 34 1 0 10 821 2018-02-05
9 18 34 1 1 10 591 2018-02-05
10 18 24 0 1 10 123 2018-02-06
11 18 24 1 0 10 641 2018-02-06
12 18 24 1 1 10 901 2018-02-06
13 25 34 0 1 10 671 2018-02-06
14 25 34 1 0 10 421 2018-02-06
15 25 34 1 1 10 784 2018-02-06
16 18 34 0 1 10 794 2018-02-06
17 18 34 1 0 10 1062 2018-02-06
18 18 34 1 1 10 1685 2018-02-06
答案 1 :(得分:0)
然后将行绑定到底部。这是 data.table 中的尝试:
library(data.table)
setDT(dat)
rbind(
dat,
dat[,
.(age_min=min(age_min), age_max=max(age_max), value=sum(value)),
by=.(female,male,ID,date)]
)
# age_min age_max female male ID value date
#1: 18 24 0 1 10 324 2018-02-05
#2: 18 24 1 0 10 241 2018-02-05
#3: 18 24 1 1 10 152 2018-02-05
#4: 25 34 0 1 10 672 2018-02-05
#5: 25 34 1 0 10 580 2018-02-05
#6: 25 34 1 1 10 439 2018-02-05
#7: 18 34 0 1 10 996 2018-02-05
#8: 18 34 1 0 10 821 2018-02-05
#9: 18 34 1 1 10 591 2018-02-05