遍历数据框列表,将列1移至行名?

时间:2019-10-17 14:50:53

标签: r list dataframe lapply

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

请在下面找到示例数据,然后尝试以下操作:

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',依此类推。

谢谢。抱歉,如果这是重复的话。

2 个答案:

答案 0 :(得分:3)

lapply(listdfs, function(x){
    row.names(x) = x[,1]
    x[,-1]
})

答案 1 :(得分:1)

tidyverse使用map(在list上循环)和column_to_rownamestibble来的选项

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