gpt4 book ai didi

r - 如何提取数据框列表中的列名称?

转载 作者:行者123 更新时间:2023-12-03 02:02:53 26 4
gpt4 key购买 nike

我的问题是这样的:我有一个 data.frame 列表,并为每个 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

谢谢。

最佳答案

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

关于r - 如何提取数据框列表中的列名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50236161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com