【问题标题】:Loop across list of dataframes, moving column 1 to row names?循环遍历数据框列表,将第 1 列移动到行名?
【发布时间】:2019-10-17 14:50:53
【问题描述】:

有一个数据框列表,我想循环移动第 1 列到行名。

请在下面找到示例数据,以及我尝试的一个 lapply:

d1 <- data.frame(y1 = c('row1', 'row2','row3', 'row4'), y2 = c(4, 5, 6, 7), y3 = c(40, 50, 60, 70))
d2 <- data.frame(y1 = c('row1', 'row2','row3', 'row4'), y2 = c(6, 5, 4, 4), y3 = c(40, 50, 60, 70))
d3 <- data.frame(y1 = c('row1', 'row2','row3', 'row4'), y2 = c(6, 5, 5, 4), y3 = c(40, 50, 60, 70))
d4 <- data.frame(y1 = c('row1', 'row2','row3', 'row4'), y2 = c(6, 5, 2, 4), y3 = c(40, 50, 60, 70))
listdfs <- list(d1, d2, d3, d4)

 [[1]]
   y1   y2 y3
 1 row1  4 40
 2 row2  5 50
 3 row3  6 60
 4 row4  7 70

 [[2]]
   y1   y2 y3
 1 row1  6 40
 2 row2  5 50
 3 row3  4 60
 4 row4  4 70

 [[3]]
   y1   y2 y3
 1 row1  6 40
 2 row2  5 50
 3 row3  5 60
 4 row4  4 70

 [[4]]
   y1   y2 y3
 1 row1  6 40
 2 row2  5 50
 3 row3  2 60
 4 row4  4 70

lapply(listdfs, function(df) transform(df, rownames(df) = y1))

所以行名变成'row1'等等。

谢谢。如有重复请见谅。

【问题讨论】:

    标签: r list dataframe lapply


    【解决方案1】:
    lapply(listdfs, function(x){
        row.names(x) = x[,1]
        x[,-1]
    })
    

    【讨论】:

      【解决方案2】:

      tidyverse 的选项使用map(循环遍历list)和column_to_rownames 来自tibble

      library(purrr)
      library(tibble)
      map(listdfs, column_to_rownames, var = 'y1')
      #[[1]]
      #     y2 y3
      #row1  4 40
      #row2  5 50
      #row3  6 60
      #row4  7 70
      
      #[[2]]
      #     y2 y3
      #row1  6 40
      #row2  5 50
      #row3  4 60
      #row4  4 70
      
      #[[3]]
      #     y2 y3
      #row1  6 40
      #row2  5 50
      #row3  5 60
      #row4  4 70
      
      #[[4]]
      #     y2 y3
      #row1  6 40
      #row2  5 50
      #row3  2 60
      #row4  4 70
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-28
        • 2021-08-31
        • 2017-06-08
        • 2021-02-08
        • 2021-03-31
        • 1970-01-01
        相关资源
        最近更新 更多