r - 基于 R 中的另一个向量创建一个向量?

标签 r

在我的数据中,我有一个字符向量,其中一个字符(在本例中为字母 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 索引,然后使用 fillNA 替换为非 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/

相关文章:

r - 来自 R 代码块的动态 RMarkdown 标题

r - 如何提取两个字符串之间的数字?

r - 在 Shiny 中的 conditionalPanel 中添加多个条件

python - 导入 pandas.rpy.common 时 Python 中的段错误 11

r - 使用 RVest 创建 HTML 表,然后使用操作和清理到 DF

r - ggplot2 不显示 geom_abline 中特征的图例

r - 如何在 rmarkdown 中使用 Twitter bootstrap 网格布局?

r - 是否不可能在 Ubuntu 18.04.4 LTS 上安装 R 4.0,因为 r-base-core 需要 libc6 版本 >= 2.29?

R图: size and resolution

r - 我的 corrplot 不适合屏幕?