【发布时间】:2021-02-03 09:33:11
【问题描述】:
让我用一个例子来说明我的问题:
样本数据:
df<-data.frame(BirthYear = c(1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005), Number= c(1,1,1,1,1,1,1,1,1,1,1), Group = c("g", "g", "g", "g", "g", "g","t","t","t","t","t"))
df
BirthYear Number Group
1 1995 1 g
2 1996 1 g
3 1997 1 g
4 1998 1 g
5 1999 1 g
6 2000 1 g
7 2001 1 t
8 2002 1 t
9 2003 1 t
10 2004 1 t
11 2005 1 t
和
df1<- structure(list(Year = c(2015, 2016, 2017, 2018, 2019, 2020)), class = "data.frame", row.names = c(NA,
-6L))
df1
Year
1 2015
2 2016
3 2017
4 2018
5 2019
6 2020
现在我想向df1 添加新列:g1、g2、t1 和 t2。
g1 和 t1 分别代表组的所有实例(df 中的 g 或 t)的 df$Number 的总和,其中 df1$Year - df$BirthYear 大于 18 且小于 21,所以基本上如果某人的年龄在 19 到 20 之间。
g2 和 t2 表示年差小于 19 的组中所有实例的 df$Number 的总和。
我想得到以下结果:
df1
Year g1 g2 t1 t2
1 2015 2 4 0 5
2 2016 2 3 0 5
3 2017 2 2 0 5
4 2018 2 1 0 5
5 2019 2 0 0 5
6 2020 1 0 1 4
我知道我可以在 df1 上创建一个 for 循环来创建新列,但我不知道如何指定条件以获取每年的正确组总和。
我希望这个例子能清楚地说明我想要达到的目标。
我将非常感谢任何帮助,因为我真的被困在这一点上。
【问题讨论】:
-
df$Year是出生年份,df1$Year是当前年份吗?如果列具有不同的名称,则可能不会那么混乱。 -
是的,这就是他们所代表的......我将更改问题中的列名以使其更清晰
标签: r loops sum conditional-statements grouping