有一个数据帧列表,我想循环将第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',依此类推。
谢谢。抱歉,如果这是重复的话。
答案 0 :(得分:3)
lapply(listdfs, function(x){
row.names(x) = x[,1]
x[,-1]
})
答案 1 :(得分:1)
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