我有一个矩阵,我想从中选择一个观察点及其列名。
如果我使用subset()
或matrix[]%in%
,那么我会得到整行。
我只想获得单一观察及其列名。 有没有办法做到这一点?
以下是一个例子:
矩阵
col1 col2 col3
row 1 10 20 30
row 2 30 30 40
现在我想选择具有最高值的值和列名称:
max <- max(matrix)
subset(matrix, matrix==max)
这给出了输出:
col1 col2 col3
row 2 30 30 40
但我想得到的是:
col3
40
答案 0 :(得分:1)
如您所知,您只需要获取列名称。
出于明显原因调用矩阵m
:
m <- matrix(c(10,30,20,30,30,40), ncol=3)
colnames(m) <- c('col1','col2','col3')
要查看哪些列包含max(或任何特定值)及其名称,apply
可用于返回名称为的逻辑向量:
apply(m==10, 2, any)
col1 col2 col3
TRUE FALSE FALSE
apply(m==30, 2, any)
col1 col2 col3
TRUE TRUE TRUE
which
告诉您哪些值为真:
which(apply(m==40, 2, any))
col3
3
只有名字,如果你需要的话:
names(which(apply(m==40, 2, any)))
[1] "col3"
答案 1 :(得分:0)
试试这个:
setNames(c(m), colnames(m)[col(m)])[m == max(m)]