【发布时间】:2017-10-09 00:35:54
【问题描述】:
给定一个包含不同组的非常大的纵向数据集,我需要创建一个标志,以指示每个组 (id) 在年份 (year) 之间某个变量 (code) 的第一次变化。同一id-year内观察的type只是表示不同的组成员。
样本数据:
library(tidyverse)
sample <- tibble(id = rep(1:3, each=6),
year = rep(2010:2012, 3, each=2),
type = (rep(1:2, 9)),
code = c("abc","abc","","","xyz","xyz", "","","lmn","","efg","efg","def","def","","klm","nop","nop"))
我需要将组内的第一个更改标记为code,在几年之间。第二个变化无所谓。缺失代码 ("") 可以视为NA,但无论如何不应影响flag。以下是上面带有标志字段的小标题:
# A tibble: 18 × 5
id year type code flag
<int> <int> <int> <chr> <dbl>
1 1 2010 1 abc 0
2 1 2010 2 abc 0
3 1 2011 1 0
4 1 2011 2 0
5 1 2012 1 xyz 1
6 1 2012 2 xyz 1
7 2 2010 1 0
8 2 2010 2 0
9 2 2011 1 lmn 0
10 2 2011 2 0
11 2 2012 1 efg 1
12 2 2012 2 efg 1
13 3 2010 1 def 0
14 3 2010 2 def 0
15 3 2011 1 1
16 3 2011 2 klm 1
17 3 2012 1 nop 1
18 3 2012 2 nop 1
我仍然有一个循环的心态,我正在尝试使用矢量化 dplyr 来做我需要的事情。 任何意见将不胜感激!
编辑:感谢您指出year 的重要性。 id 是按年份排列的,因为这里的顺序很重要,而且所有 types 每 id 每 year 都需要具有相同的标志。因此,在编辑后的第 15 行中,e 代码是 "",它本身不需要更改,但由于在同一年第 16 行有一个新的 code,因此两个观察值都需要将它们的代码更改为 1。
【问题讨论】:
-
您可能应该更新您的示例以更好地展示年份列的相关性,因为大多数答案都没有考虑到它
-
年份仅在两种情况下很重要 - (1) 它是一种排序机制,以及 (2) id i 的所有标志在任何一年中都应该相同