根据重复的整数变量和逻辑变量分配ID
assign ID based on duplicate integer variable and logical variable
我无法根据其他 2 列的条件为行分配新 ID。
old_ID N n1
1 1 FALSE
2 1 FALSE
3 12 FALSE
4 12 FALSE
5 3 FALSE
6 4 FALSE
7 5 TRUE
8 5 TRUE
9 6 FALSE
10 7 FALSE
sample <- data.frame(old_ID = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14),
N = c(1,1,12,12,3,4,5,5,6,7,8,9,10,11),
n1 = c(FALSE, FALSE,FALSE, FALSE, FALSE, FALSE, TRUE,TRUE,FALSE,FALSE, FALSE,FALSE, FALSE, FALSE))
第 N 列是 class 整数,第 n1 列是 class 逻辑。有 3 种可能的情况:
- 如果 N 重复且 n1 为 FALSE,我希望 'newID' 列也显示重复的数字。
- 如果 N 重复且 n1 为 TRUE,则 'newID' 应显示唯一编号。
- 如果 N 是唯一的,那么 newID 应该显示一个唯一的数字。
期望的输出:
old_ID N n1 new_ID
1 1 FALSE 1
2 1 FALSE 1
3 12 FALSE 2
4 12 FALSE 2
5 3 FALSE 3
6 4 FALSE 4
7 5 TRUE 5
8 5 TRUE 6
9 6 FALSE 7
10 7 FALSE 8
这个问题是我在这里提出的一个更大问题的一部分 (Assign ID column based on multiple columns) 但是我认为,正如 Kévin Legueult 所建议的那样,我首先需要为此找到一个解决方案,创建一个新的 variable/column 对于这种情况。
这是 data.table::rleid
的一种方式:
sample$id <- with(sample, data.table::rleid(N + cumsum(n1)))
#> sample
old_ID N n1 id
1 1 1 FALSE 1
2 2 1 FALSE 1
3 3 12 FALSE 2
4 4 12 FALSE 2
5 5 3 FALSE 3
6 6 4 FALSE 4
7 7 5 TRUE 5
8 8 5 TRUE 6
9 9 6 FALSE 7
10 10 7 FALSE 8
11 11 8 FALSE 9
12 12 9 FALSE 10
13 13 10 FALSE 11
14 14 11 FALSE 12
或使用 base R
和 rle
sample$id <- with(sample, with(rle(N + cumsum(n1)),
rep(seq_along(values), lengths) ))
我无法根据其他 2 列的条件为行分配新 ID。
old_ID N n1
1 1 FALSE
2 1 FALSE
3 12 FALSE
4 12 FALSE
5 3 FALSE
6 4 FALSE
7 5 TRUE
8 5 TRUE
9 6 FALSE
10 7 FALSE
sample <- data.frame(old_ID = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14),
N = c(1,1,12,12,3,4,5,5,6,7,8,9,10,11),
n1 = c(FALSE, FALSE,FALSE, FALSE, FALSE, FALSE, TRUE,TRUE,FALSE,FALSE, FALSE,FALSE, FALSE, FALSE))
第 N 列是 class 整数,第 n1 列是 class 逻辑。有 3 种可能的情况:
- 如果 N 重复且 n1 为 FALSE,我希望 'newID' 列也显示重复的数字。
- 如果 N 重复且 n1 为 TRUE,则 'newID' 应显示唯一编号。
- 如果 N 是唯一的,那么 newID 应该显示一个唯一的数字。
期望的输出:
old_ID N n1 new_ID
1 1 FALSE 1
2 1 FALSE 1
3 12 FALSE 2
4 12 FALSE 2
5 3 FALSE 3
6 4 FALSE 4
7 5 TRUE 5
8 5 TRUE 6
9 6 FALSE 7
10 7 FALSE 8
这个问题是我在这里提出的一个更大问题的一部分 (Assign ID column based on multiple columns) 但是我认为,正如 Kévin Legueult 所建议的那样,我首先需要为此找到一个解决方案,创建一个新的 variable/column 对于这种情况。
这是 data.table::rleid
的一种方式:
sample$id <- with(sample, data.table::rleid(N + cumsum(n1)))
#> sample
old_ID N n1 id
1 1 1 FALSE 1
2 2 1 FALSE 1
3 3 12 FALSE 2
4 4 12 FALSE 2
5 5 3 FALSE 3
6 6 4 FALSE 4
7 7 5 TRUE 5
8 8 5 TRUE 6
9 9 6 FALSE 7
10 10 7 FALSE 8
11 11 8 FALSE 9
12 12 9 FALSE 10
13 13 10 FALSE 11
14 14 11 FALSE 12
或使用 base R
和 rle
sample$id <- with(sample, with(rle(N + cumsum(n1)),
rep(seq_along(values), lengths) ))