r - 如何通过选定的行值创建新行
问题描述
我有两个数据集需要加入,其中一个需要在 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+ 的总值。非常感谢您的帮助,乔恩!
解决方案
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
推荐阅读
- c - 当循环在C中结束时如何执行指令
- apache-spark - 如何将 org.apache.spark.sql.DataFrame 转换为 org.apache.spark.rdd.RDD[Double]?
- javascript - 如何在按回车键使用 contenteditable 时多次提交表单
- java - 这段代码的问题在于输出。生产者生产不止一次。为什么以及如何解决它?
- scala - Scala:有没有一种方法可以将类型别名与它们别名的类型区别对待?
- c# - Unity - SendMessage,但用于变量而不是函数/方法
- wpf - Telerik RadMenuItem IsEnabled 没有持续刷新
- f# - 删除 F# 中嵌套列表中的第一个元素?
- python - 如何使用按钮将图像一张一张地添加到网格的每个单元格中
- java - 垂直直方图