Цикл по списку кадров данных, перемещение столбца 1 к именам строк? - PullRequest
1 голос
/ 17 октября 2019

У меня есть список фреймов данных, я хочу перебрать по движущемуся столбцу 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 ]

3 голосов
/ 17 октября 2019
lapply(listdfs, function(x){
    row.names(x) = x[,1]
    x[,-1]
})
1 голос
/ 17 октября 2019

Опция с 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
...