如何在 R 中重复序列但在重复时调整向量中的值?

How to repeat a sequence in R but adjust values in the vector when repeated?

这是一个例子:

这行代码重复指定的每个主题两次:

subject <- rep(c("maths", "english", "science"), each = 2)

因此“主题”在控制台中的输出是:

# [1] "maths"   "maths"   "english" "english" "science" "science"

如何调整我的代码以对重复的矢量进行微小的更改?我希望变量“subject”在 运行:

时产生以下内容
"maths.A" "maths.B" "english.A" "english.B" "science.A" "science.B"

这在生成大量数据时非常有用。手动输入名称效率很低。

我不确定是否有办法做到这一点,但欢迎任何想法:)

你可以做到

paste(rep(c("maths", "english", "science"), each = 2), c("A", "B"), sep = ".")
#> [1] "maths.A"   "maths.B"   "english.A" "english.B" "science.A" "science.B"

也许试试

with(expand.grid(c("A", "B"), c("maths", "english", "science")), paste0(Var2, ".", Var1))

输出

[1] "maths.A"   "maths.B"   "english.A" "english.B" "science.A" "science.B"

你也可以使用 sapply 甚至 outer:

c(sapply(c("maths", "english", "science"), paste, c("A","B"),sep="."))
[1] "maths.A"   "maths.B"   "english.A" "english.B" "science.A" "science.B"

这是另一个基础 R 选项

x <- c("maths", "english", "science")
y <- c("A","B")
do.call(paste,c(rev(expand.grid(y,x)),sep = "."))

这给出了

> do.call(paste,c(rev(expand.grid(y,x)),sep = "."))
[1] "maths.A"   "maths.B"   "english.A" "english.B" "science.A" "science.B"

我们也可以用outer

c(outer(x, y, FUN = paste, sep="."))

数据

x <- c("maths", "english", "science")
y <- c("A","B")