首页 > 解决方案 > 如何通过选定的行值创建新行

问题描述

我有两个数据集需要加入,其中一个需要在 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+ 的总值。非常感谢您的帮助,乔恩!

标签: rdataframe

解决方案


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

推荐阅读