Как извлечь имена столбцов в списке фреймов данных? - PullRequest
0 голосов
/ 08 мая 2018

Моя проблема заключается в следующем: у меня есть список data.frames и я создаю матрицу расстояний для каждого data.frame. Затем я хочу извлечь минимальное расстояние для каждой строки и имя соответствующего столбца. Я знаю, как сделать первое, но не второе. Я (надеюсь), это легко исправить, но я не могу обернуть голову вокруг этого. Вот моя попытка:

#create list of matrices
A = matrix(c(5, 4, 2, 1, 5, 7), nrow=3, ncol=3, byrow = TRUE)        
B = matrix(c(2, 5, 10, 9, 8, 7), nrow=3, ncol=3, byrow = TRUE)
list.matrix <- list(A,B)

#create names
column.names <- c("A", "B", "C")
df = data.frame(column.names)

#name rows
list.matrix<-lapply(list.matrix, function(x){colnames(x)<- as.character(df$column.names); x})

#Then I can get the smallest value by row
min.list.value <- lapply(list.matrix, function(x) apply(x, 1, min)) #smallest value per row
min.list.row <-  lapply(list.matrix, function(x) (max.col(-x))) #column index of smallest value

#But how do I get the colname of the row with the smallest value??
#Something like this, which does not work (obviously)
min.list.colname <- lapply(list.matrix, function(x) apply(x, 1, colnames(min))) #smallest value per row

Спасибо.

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Или:

(min.list.colname <- lapply(list.matrix, function(x) colnames(x)[apply(x, 1, which.min)]))
0 голосов
/ 10 мая 2019

Имена столбцов могут быть получены как colnames(data_frame).

Теперь используйте transpose, чтобы получить имена столбцов в виде списка:

colnames_df <- t(t(colnames(data_frame))
0 голосов
/ 08 мая 2018
min.list.colname <- lapply(min.list.row, function(x) column.names[x])

Это можно использовать для получения значений, индексов столбцов и имен столбцов

library(purrr)
library(magrittr)


list.matrix %>% 
  lapply(apply, 1, which.min) %>% 
  imap(~data.frame(value = list.matrix[[.y]][cbind(seq_along(.x), .x)]
                  , ColName = colnames(list.matrix[[.y]])[.x]
                  , ColIndex = .x))

# [[1]]
#   value ColName ColIndex
# 1     2       C        3
# 2     1       A        1
# 3     2       C        3
# 
# [[2]]
#   value ColName ColIndex
# 1     2       A        1
# 2     7       C        3
# 3     2       A        1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...