为每个 "n rows" 重复一组 ID
Repeat a set of ID's for every "n rows"
我在 R 中有这个数据集:
first_variable = rexp(100,100)
second_variable = rexp(100,100)
n_obs = 1:100
question_data = data.frame(n_obs, first_variable, second_variable)
我想制作此数据集以便:
- 第1-10行有id:1,2,3,4,5,6,7,8,9,10
- 第 11-20 行的编号为:1,2,3,4,5,6,7,8,9,10
- 第 21-30 行的编号为:1,2,3,4,5,6,7,8,9,10
等等
换句话说,每组 10 行重复 id 的 1-10。
我找到了我认为可行的代码:
# here, n = 10 (a set of n = 10 rows)
bloc_len <- 10
question_data$id <-
rep(seq(1, 1 + nrow(question_data) %/% bloc_len), each = bloc_len, length.out = nrow(question_data))
但这不起作用,并且将每组 10 行设为相同的 ID:
n_obs first_variable second_variable id
1 1 0.006223412 0.0258968583 1
2 2 0.004473815 0.0065543554 1
3 3 0.011745754 0.0005061101 1
4 4 0.005620351 0.0033549525 1
5 5 0.045860202 0.0132625822 1
6 6 0.002477348 0.0068517981 1
我想要这样的东西:
n_obs first_variable second_variable id
1 1 0.0062234115 0.0258968583 1
2 2 0.0044738150 0.0065543554 2
3 3 0.0117457544 0.0005061101 3
4 4 0.0056203508 0.0033549525 4
5 5 0.0458602019 0.0132625822 5
6 6 0.0024773478 0.0068517981 6
7 7 0.0049527013 0.0047461094 7
8 8 0.0058581805 0.0108604478 8
9 9 0.0041171801 0.0002445268 9
10 10 0.0090667287 0.0019289691 10
11 11 0.0039002449 0.0135441919 1
12 12 0.0064558661 0.0230979415 2
13 13 0.0104993267 0.0005609776 3
14 14 0.0153162705 0.0038364012 4
15 15 0.0107109676 0.0183818539 5
16 16 0.0131620151 0.0029710189 6
17 17 0.0244441763 0.0095645480 7
18 18 0.0058112355 0.0125754349 8
19 19 0.0005022588 0.0156614272 9
20 20 0.0007572985 0.0049964333 10
21 21 0.0276024376 0.0024303513 1
这可能吗?
谢谢!
而不是 each
,尝试使用 times
:
question_data$id <-
rep(seq(bloc_len), times = nrow(question_data) %/% bloc_len, length.out = nrow(question_data))
就像分享的例子一样,如果数据中的行数(100)完全可以被id的数量(10)整除,那么我们可以使用R的回收属性来重复id的。
bloc_len <- 10
question_data$id <- seq_len(bloc_len)
如果它们不能完全整除我们可以使用rep
-
question_data$id <- rep(seq_len(bloc_len), length.out = nrow(question_data))
我在 R 中有这个数据集:
first_variable = rexp(100,100)
second_variable = rexp(100,100)
n_obs = 1:100
question_data = data.frame(n_obs, first_variable, second_variable)
我想制作此数据集以便:
- 第1-10行有id:1,2,3,4,5,6,7,8,9,10
- 第 11-20 行的编号为:1,2,3,4,5,6,7,8,9,10
- 第 21-30 行的编号为:1,2,3,4,5,6,7,8,9,10 等等
换句话说,每组 10 行重复 id 的 1-10。
我找到了我认为可行的代码:
# here, n = 10 (a set of n = 10 rows)
bloc_len <- 10
question_data$id <-
rep(seq(1, 1 + nrow(question_data) %/% bloc_len), each = bloc_len, length.out = nrow(question_data))
但这不起作用,并且将每组 10 行设为相同的 ID:
n_obs first_variable second_variable id
1 1 0.006223412 0.0258968583 1
2 2 0.004473815 0.0065543554 1
3 3 0.011745754 0.0005061101 1
4 4 0.005620351 0.0033549525 1
5 5 0.045860202 0.0132625822 1
6 6 0.002477348 0.0068517981 1
我想要这样的东西:
n_obs first_variable second_variable id
1 1 0.0062234115 0.0258968583 1
2 2 0.0044738150 0.0065543554 2
3 3 0.0117457544 0.0005061101 3
4 4 0.0056203508 0.0033549525 4
5 5 0.0458602019 0.0132625822 5
6 6 0.0024773478 0.0068517981 6
7 7 0.0049527013 0.0047461094 7
8 8 0.0058581805 0.0108604478 8
9 9 0.0041171801 0.0002445268 9
10 10 0.0090667287 0.0019289691 10
11 11 0.0039002449 0.0135441919 1
12 12 0.0064558661 0.0230979415 2
13 13 0.0104993267 0.0005609776 3
14 14 0.0153162705 0.0038364012 4
15 15 0.0107109676 0.0183818539 5
16 16 0.0131620151 0.0029710189 6
17 17 0.0244441763 0.0095645480 7
18 18 0.0058112355 0.0125754349 8
19 19 0.0005022588 0.0156614272 9
20 20 0.0007572985 0.0049964333 10
21 21 0.0276024376 0.0024303513 1
这可能吗?
谢谢!
而不是 each
,尝试使用 times
:
question_data$id <-
rep(seq(bloc_len), times = nrow(question_data) %/% bloc_len, length.out = nrow(question_data))
就像分享的例子一样,如果数据中的行数(100)完全可以被id的数量(10)整除,那么我们可以使用R的回收属性来重复id的。
bloc_len <- 10
question_data$id <- seq_len(bloc_len)
如果它们不能完全整除我们可以使用rep
-
question_data$id <- rep(seq_len(bloc_len), length.out = nrow(question_data))