如何在 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")
这是一个例子:
这行代码重复指定的每个主题两次:
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")