在异常序列上创建 ID
Create ID over an abnormal sequence
我有以下代码采样 1 行 5 次,2 行 5 次,3 行 5 次等等。
在 运行 和 lapply 并将其转换为数据框以进行比较之后,我需要一种方法来更改 ID 变量以充当我的组。所以“想要”的行 1:5 将是“第 1 组”,第 6:15 行将是“第 2 组”,16:30 将是“第 3 组”等等...
这些是分组,因为第 1 组只有 ID 列中每个数字的一个重复,第 2 组有两个重复,第 3 组有 3 个重复,依此类推。
代码
iris<- iris
select_rows <- 1:4
n_times <- 5
inds <- nrow(iris)
result <- lapply(select_rows, function(x)
replicate(n_times, iris[sample(inds, x), ], simplify = FALSE))
want<- bind_rows(result, .id = 'source')
View(want)
例如考虑 运行 每列的方差分析,ID 列不会提供足够的观察分组。
我想我可以使用 ifelse
和 mutate
的组合来手动浏览并将行分配给某些组,但我希望避免这种情况,因为我需要对几个不同的数据帧执行此操作。
我还尝试了以下代码在序列上分配组,但意识到它不起作用,因为每个组中的观察数不相同:
final<- want %>% mutate(Group = rep(seq(1,ceiling(nrow(want)/5)),each = 5))
如有任何帮助,我们将不胜感激。
使用 rep
的 times
参数得到五个 1、十个 2、十五个 3 等。
dat$id <- rep(1:3, times=1:3*5)
这是另一个使用 findInterval
和 cumsum
的选项:
want$grp <- c(findInterval(seq(1:nrow(want)), cumsum(c(n_times * select_rows))+1))
输出
source Sepal.Length Sepal.Width Petal.Length Petal.Width Species grp
1 1 5.4 3.7 1.5 0.2 setosa 0
2 2 4.8 3.1 1.6 0.2 setosa 0
3 3 6.1 2.8 4.7 1.2 versicolor 0
4 4 6.7 3.3 5.7 2.5 virginica 0
5 5 5.4 3.4 1.7 0.2 setosa 0
6 6 5.5 2.4 3.8 1.1 versicolor 1
7 6 6.0 2.2 5.0 1.5 virginica 1
8 7 5.0 3.5 1.6 0.6 setosa 1
9 7 5.6 2.5 3.9 1.1 versicolor 1
10 8 5.2 3.4 1.4 0.2 setosa 1
11 8 6.2 3.4 5.4 2.3 virginica 1
12 9 6.7 3.1 4.7 1.5 versicolor 1
13 9 5.1 3.3 1.7 0.5 setosa 1
14 10 7.7 3.8 6.7 2.2 virginica 1
15 10 6.0 3.4 4.5 1.6 versicolor 1
16 11 5.0 3.3 1.4 0.2 setosa 2
17 11 6.6 3.0 4.4 1.4 versicolor 2
18 11 5.6 2.5 3.9 1.1 versicolor 2
19 12 4.4 3.2 1.3 0.2 setosa 2
20 12 6.7 3.3 5.7 2.5 virginica 2
21 12 5.9 3.0 5.1 1.8 virginica 2
22 13 5.8 2.7 4.1 1.0 versicolor 2
23 13 5.4 3.4 1.5 0.4 setosa 2
24 13 5.5 2.4 3.8 1.1 versicolor 2
25 14 5.6 2.5 3.9 1.1 versicolor 2
26 14 6.0 2.2 5.0 1.5 virginica 2
27 14 5.7 3.8 1.7 0.3 setosa 2
28 15 6.2 3.4 5.4 2.3 virginica 2
29 15 6.5 3.2 5.1 2.0 virginica 2
30 15 5.8 2.7 4.1 1.0 versicolor 2
31 16 5.1 3.5 1.4 0.2 setosa 3
32 16 5.8 2.7 5.1 1.9 virginica 3
33 16 4.3 3.0 1.1 0.1 setosa 3
34 16 4.6 3.2 1.4 0.2 setosa 3
35 17 4.9 3.0 1.4 0.2 setosa 3
36 17 5.4 3.0 4.5 1.5 versicolor 3
37 17 6.7 3.1 4.7 1.5 versicolor 3
38 17 6.3 2.3 4.4 1.3 versicolor 3
39 18 4.7 3.2 1.3 0.2 setosa 3
40 18 6.5 2.8 4.6 1.5 versicolor 3
41 18 4.9 3.1 1.5 0.1 setosa 3
42 18 6.4 2.7 5.3 1.9 virginica 3
43 19 6.1 3.0 4.9 1.8 virginica 3
44 19 6.2 2.8 4.8 1.8 virginica 3
45 19 4.8 3.1 1.6 0.2 setosa 3
46 19 5.9 3.0 5.1 1.8 virginica 3
47 20 5.4 3.9 1.7 0.4 setosa 3
48 20 6.2 2.9 4.3 1.3 versicolor 3
49 20 6.4 2.7 5.3 1.9 virginica 3
50 20 6.3 3.4 5.6 2.4 virginica 3
我有以下代码采样 1 行 5 次,2 行 5 次,3 行 5 次等等。 在 运行 和 lapply 并将其转换为数据框以进行比较之后,我需要一种方法来更改 ID 变量以充当我的组。所以“想要”的行 1:5 将是“第 1 组”,第 6:15 行将是“第 2 组”,16:30 将是“第 3 组”等等... 这些是分组,因为第 1 组只有 ID 列中每个数字的一个重复,第 2 组有两个重复,第 3 组有 3 个重复,依此类推。
代码
iris<- iris
select_rows <- 1:4
n_times <- 5
inds <- nrow(iris)
result <- lapply(select_rows, function(x)
replicate(n_times, iris[sample(inds, x), ], simplify = FALSE))
want<- bind_rows(result, .id = 'source')
View(want)
例如考虑 运行 每列的方差分析,ID 列不会提供足够的观察分组。
我想我可以使用 ifelse
和 mutate
的组合来手动浏览并将行分配给某些组,但我希望避免这种情况,因为我需要对几个不同的数据帧执行此操作。
我还尝试了以下代码在序列上分配组,但意识到它不起作用,因为每个组中的观察数不相同:
final<- want %>% mutate(Group = rep(seq(1,ceiling(nrow(want)/5)),each = 5))
如有任何帮助,我们将不胜感激。
使用 rep
的 times
参数得到五个 1、十个 2、十五个 3 等。
dat$id <- rep(1:3, times=1:3*5)
这是另一个使用 findInterval
和 cumsum
的选项:
want$grp <- c(findInterval(seq(1:nrow(want)), cumsum(c(n_times * select_rows))+1))
输出
source Sepal.Length Sepal.Width Petal.Length Petal.Width Species grp
1 1 5.4 3.7 1.5 0.2 setosa 0
2 2 4.8 3.1 1.6 0.2 setosa 0
3 3 6.1 2.8 4.7 1.2 versicolor 0
4 4 6.7 3.3 5.7 2.5 virginica 0
5 5 5.4 3.4 1.7 0.2 setosa 0
6 6 5.5 2.4 3.8 1.1 versicolor 1
7 6 6.0 2.2 5.0 1.5 virginica 1
8 7 5.0 3.5 1.6 0.6 setosa 1
9 7 5.6 2.5 3.9 1.1 versicolor 1
10 8 5.2 3.4 1.4 0.2 setosa 1
11 8 6.2 3.4 5.4 2.3 virginica 1
12 9 6.7 3.1 4.7 1.5 versicolor 1
13 9 5.1 3.3 1.7 0.5 setosa 1
14 10 7.7 3.8 6.7 2.2 virginica 1
15 10 6.0 3.4 4.5 1.6 versicolor 1
16 11 5.0 3.3 1.4 0.2 setosa 2
17 11 6.6 3.0 4.4 1.4 versicolor 2
18 11 5.6 2.5 3.9 1.1 versicolor 2
19 12 4.4 3.2 1.3 0.2 setosa 2
20 12 6.7 3.3 5.7 2.5 virginica 2
21 12 5.9 3.0 5.1 1.8 virginica 2
22 13 5.8 2.7 4.1 1.0 versicolor 2
23 13 5.4 3.4 1.5 0.4 setosa 2
24 13 5.5 2.4 3.8 1.1 versicolor 2
25 14 5.6 2.5 3.9 1.1 versicolor 2
26 14 6.0 2.2 5.0 1.5 virginica 2
27 14 5.7 3.8 1.7 0.3 setosa 2
28 15 6.2 3.4 5.4 2.3 virginica 2
29 15 6.5 3.2 5.1 2.0 virginica 2
30 15 5.8 2.7 4.1 1.0 versicolor 2
31 16 5.1 3.5 1.4 0.2 setosa 3
32 16 5.8 2.7 5.1 1.9 virginica 3
33 16 4.3 3.0 1.1 0.1 setosa 3
34 16 4.6 3.2 1.4 0.2 setosa 3
35 17 4.9 3.0 1.4 0.2 setosa 3
36 17 5.4 3.0 4.5 1.5 versicolor 3
37 17 6.7 3.1 4.7 1.5 versicolor 3
38 17 6.3 2.3 4.4 1.3 versicolor 3
39 18 4.7 3.2 1.3 0.2 setosa 3
40 18 6.5 2.8 4.6 1.5 versicolor 3
41 18 4.9 3.1 1.5 0.1 setosa 3
42 18 6.4 2.7 5.3 1.9 virginica 3
43 19 6.1 3.0 4.9 1.8 virginica 3
44 19 6.2 2.8 4.8 1.8 virginica 3
45 19 4.8 3.1 1.6 0.2 setosa 3
46 19 5.9 3.0 5.1 1.8 virginica 3
47 20 5.4 3.9 1.7 0.4 setosa 3
48 20 6.2 2.9 4.3 1.3 versicolor 3
49 20 6.4 2.7 5.3 1.9 virginica 3
50 20 6.3 3.4 5.6 2.4 virginica 3