在我的数据中,我有一个字符向量,其中一个字符(在本例中为字母 P
)重复一定次数。例如,如果我有以下信息:
number <- 2
iterations <- 2
和一个字符向量:
df <- data.frame(var = c("P", "a", "b", "P", "d", "a", "k",
"P", "e", "q", "s", "P", "d", "v", "i", "j"))
我们可以看到P
重复了4次。或者,换句话说,P
重复 number * iterations
次。
因此,在我的代码中,我有一些创建数据框df
的函数,它将创建始终以P
开头的字符串序列。这种情况会发生 number
次(在本例中为 2)...并按 iterations
数进行迭代(在本例中也是 2)。因此,这意味着 P
在我的数据框中出现 number * iterations
次。
我正在尝试创建一个包含迭代编号的新列。因此,在我的示例中,前两个 P
将在迭代 1 中,后两个将在迭代 2 中。例如,我所需的输出将类似于:
> df
var iter
1 P 1
2 a 1
3 b 1
4 P 1
5 d 1
6 a 1
7 k 1
8 P 2
9 e 2
10 q 2
11 s 2
12 P 2
13 d 2
14 v 2
15 i 2
16 j 2
我希望我说的有道理...我发现很难准确地表达这个问题
最佳答案
我们可以使用gl
来做到这一点 - 替换
一个由NA
组成的向量,其中'var'是'P'与gl
索引,然后使用 fill
将 NA
替换为非 NA 的先前值
library(dplyr)
library(tidyr)
df %>%
mutate(iter = replace(rep(NA_integer_, n()), var == 'P',
as.integer(gl(sum(var == 'P'), 2, sum(var == 'P'))))) %>%
fill(iter)
-输出
var iter
1 P 1
2 a 1
3 b 1
4 P 1
5 d 1
6 a 1
7 k 1
8 P 2
9 e 2
10 q 2
11 s 2
12 P 2
13 d 2
14 v 2
15 i 2
16 j 2
关于r - 基于 R 中的另一个向量创建一个向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69790442/