1

我正在尝试根据两个向量的组合重命名列名。

vector_a <- seq(5, 50, 5)
vector_b <- seq(2, 10, 1)
df <- as.data.frame(matrix(0, nrow = 100, ncol = length(vector_a) * length(vector_b)))

我正在尝试获取列名

k=5,f=2, k=10,f=2, k=15,f=2,...,k=50,f=2

k=5,f=3, k=10,f=3, k=15,f=3,...,k=50,f=3

...

...

...

k=5,f=10, k=10,f=10, k=15,f=10,...,k=50,f=10

不使用for循环。

我尝试了以下代码;但是,我没有收到我想要的。

paste0(rep(paste0(paste0(paste0(rep("k",length(vector_b)), "=", as.character(vector_b)), ",", "f"), "="), 10), as.character(vector_a))

先感谢您。

4

2 回答 2

1

也许,我们可以使用outer复制 'vector_a'、'vector_b' 来返回名称向量

t(outer(vector_a, vector_b, FUN = function(x, y) sprintf("k=%d, f = %d", x, y)))
# [,1]          [,2]           [,3]           [,4]           [,5]           [,6]           [,7]           [,8]          
# [1,] "k=5, f = 2"  "k=10, f = 2"  "k=15, f = 2"  "k=20, f = 2"  "k=25, f = 2"  "k=30, f = 2"  "k=35, f = 2"  "k=40, f = 2" 
# [2,] "k=5, f = 3"  "k=10, f = 3"  "k=15, f = 3"  "k=20, f = 3"  "k=25, f = 3"  "k=30, f = 3"  "k=35, f = 3"  "k=40, f = 3" 
# [3,] "k=5, f = 4"  "k=10, f = 4"  "k=15, f = 4"  "k=20, f = 4"  "k=25, f = 4"  "k=30, f = 4"  "k=35, f = 4"  "k=40, f = 4" 
# [4,] "k=5, f = 5"  "k=10, f = 5"  "k=15, f = 5"  "k=20, f = 5"  "k=25, f = 5"  "k=30, f = 5"  "k=35, f = 5"  "k=40, f = 5" 
# [5,] "k=5, f = 6"  "k=10, f = 6"  "k=15, f = 6"  "k=20, f = 6"  "k=25, f = 6"  "k=30, f = 6"  "k=35, f = 6"  "k=40, f = 6" 
# [6,] "k=5, f = 7"  "k=10, f = 7"  "k=15, f = 7"  "k=20, f = 7"  "k=25, f = 7"  "k=30, f = 7"  "k=35, f = 7"  "k=40, f = 7" 
# [7,] "k=5, f = 8"  "k=10, f = 8"  "k=15, f = 8"  "k=20, f = 8"  "k=25, f = 8"  "k=30, f = 8"  "k=35, f = 8"  "k=40, f = 8" 
# [8,] "k=5, f = 9"  "k=10, f = 9"  "k=15, f = 9"  "k=20, f = 9"  "k=25, f = 9"  "k=30, f = 9"  "k=35, f = 9"  "k=40, f = 9" 
# [9,] "k=5, f = 10" "k=10, f = 10" "k=15, f = 10" "k=20, f = 10" "k=25, f = 10" "k=30, f = 10" "k=35, f = 10" "k=40, f = 10"
#      [,9]           [,10]         
# [1,] "k=45, f = 2"  "k=50, f = 2" 
# [2,] "k=45, f = 3"  "k=50, f = 3" 
# [3,] "k=45, f = 4"  "k=50, f = 4" 
# [4,] "k=45, f = 5"  "k=50, f = 5" 
# [5,] "k=45, f = 6"  "k=50, f = 6" 
# [6,] "k=45, f = 7"  "k=50, f = 7" 
# [7,] "k=45, f = 8"  "k=50, f = 8" 
# [8,] "k=45, f = 9"  "k=50, f = 9" 
# [9,] "k=45, f = 10" "k=50, f = 10"
于 2020-07-03T23:41:31.657 回答
1

您可以使用expand.grid//获取 和 的所有crossing可能组合。expand_gridvector_avector_b

然后,您可以paste将第一列与第二列一起生成名称。

temp <- tidyr::crossing(vector_a, vector_b)
temp <- expand.grid(vector_a, vector_b)
temp <- tidyr::expand_grid(vector_a, vector_b)

paste0('k = ', temp[[1]], ', f = ', temp[[2]])

#[1] "k = 5, f = 2"   "k = 5, f = 3"   "k = 5, f = 4"   "k = 5, f = 5"  
#[5] "k = 5, f = 6"   "k = 5, f = 7"   "k = 5, f = 8"   "k = 5, f = 9"  
#[9] "k = 5, f = 10"  "k = 10, f = 2"  "k = 10, f = 3"  "k = 10, f = 4" 
#.....
于 2020-07-04T01:20:53.723 回答