【问题标题】:How to name columns in R based on combination of two vectors?如何根据两个向量的组合命名 R 中的列?
【发布时间】:2020-10-24 16:10:29
【问题描述】:

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

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))

提前谢谢你。

【问题讨论】:

    标签: r dataframe rename


    【解决方案1】:

    您可以使用expand.grid/crossing/expand_grid 来获得vector_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" 
    #.....
    

    【讨论】:

      【解决方案2】:

      也许,我们可以使用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"
      

      【讨论】:

      • 加上colnames(df) &lt;- outer(vector_b, vector_a, FUN = function(x, y) sprintf("k=%d,f=%d", x, y)) 它起作用了。非常感谢。
      猜你喜欢
      • 2021-10-19
      • 2021-12-29
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多