【发布时间】:2019-03-08 22:17:36
【问题描述】:
编辑
感谢您的回复。但是,我仍然没有解决我的问题,因为我的数据集包含 700,000 次观察,并且下面的所有方法都会导致错误,或者只是继续运行几个小时而没有完成(我可以告诉 Rstudio R Session 正在运行并且消耗了我的大量内存,但它根本不会去任何地方)。
正如您可以想象的那样,将数据集分成更小的部分不是一种选择,因为它会破坏练习的目的:我需要查看之前的每一个观察结果以获得所需的结果。
有什么想法吗?我暂时不回答这个问题,但如果你们认为我应该发布一个新问题,我会(老实说我不知道关于这些事情的礼仪,所以请随意提出建议)。
原帖
正如标题所示,我正在寻找一个虚拟变量,它以分组观察中的重复为条件。
考虑以下数据框:
id name year
1 c af 2000
2 c el 2000
3 c in 2000
4 c ud 2000
5 d ot 2000
6 d an 2000
7 d el 2000
8 d un 2000
9 f yt 2002
10 f ip 2002
11 f ot 2002
12 f el 2002
13 g yt 2003
14 g af 2003
15 g ol 2003
16 g in 2003
17 h in 2003
18 h eg 2003
19 h yt 2003
20 h af 2003
21 j ot 2004
22 j el 2004
23 j ip 2004
24 j yt 2004
我正在寻找一个函数,它允许我按 id 对数据进行分组,如果一个 id 包含至少三个名字在前一个 id 中出现,则返回值“1”。前一个 id 是指前一个 id 的年份 必须 小于当前 id 的年份。
所需的输出应如下所示:
id name year dummy
1 c af 2000 0
2 c el 2000 0
3 c in 2000 0
4 c ud 2000 0
5 d ot 2000 0
6 d an 2000 0
7 d el 2000 0
8 d un 2000 0
9 f yt 2002 0
10 f ip 2002 0
11 f ot 2002 0
12 f el 2002 0
13 g yt 2003 0
14 g af 2003 0
15 g ol 2003 0
16 g in 2003 0
17 h in 2003 0
18 h eg 2003 0
19 h yt 2003 0
20 h af 2003 0
21 j ot 2004 1
22 j el 2004 1
23 j ip 2004 1
24 j yt 2004 1
id = "j" 取值 dummy = "1",因为在 id = "f" 中至少出现了三个名称,"yt"、"ip" 和 "ot"。在这种情况下,还出现了第四个名称“el”,但这并不影响结果。
请注意,id = "h" 的值是 dummy = "0",尽管 id = "g" 中也出现了三个名称。这是因为两者都发生在 2003 年,所以不满足分开年份的条件。
数据:
DF = structure(list(id = c("c", "c", "c", "c", "d", "d", "d", "d",
"f", "f", "f", "f", "g", "g", "g", "g", "h", "h", "h", "h", "j",
"j", "j", "j"), name = c("af", "el", "in", "ud", "ot", "an",
"el", "un", "yt", "ip", "ot", "el", "yt", "af", "ol", "in", "in",
"eg", "yt", "af", "ot", "el", "ip", "yt"), year = c(2000L, 2000L,
2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2002L, 2002L, 2002L,
2002L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L,
2004L, 2004L, 2004L, 2004L), dummy = c(0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
1L, 1L)), .Names = c("id", "name", "year", "dummy"), row.names = c(NA,
-24L), class = "data.frame")
【问题讨论】:
-
对于 id="h" 和 year=2003,名称 "in" 和 "af" 出现在 id="c" 和 year=2000 中,名称 "yt" 出现在 id="f"和 year=2002,那么 dummy 不应该是 1 吗?
-
不,名称必须出现在同一个 id 中,否则不满足 id 具有至少三个相同名称的条件。
标签: r dummy-variable