This post让我开始,但我还没有能够操纵表达式来充分产生所需的输出。作为文件内容的简化版本,让我们说我在R中创建了以下矩阵:
set.seed(14)
B = matrix(sample(1:100, 9),
nrow=3,
ncol=3)
colnames(B) <- c("sam1", "sam2", "sam3")
rownames(B) <- c("obs1", "obs2", "obs3")
看起来应该是这样的:
sam1 sam2 sam3
obs1 26 54 88
obs2 64 95 40
obs3 94 49 45
我希望能够做的是遍历此矩阵以计算每列中的最大值,然后打印出一个新文件,其中包含值以及行名称和列名称。因此,所需的输出将是一个新的文件结构如下:
sam1 94 obs3
sam2 95 obs2
sam3 88 obs1
如果有帮助,文件本身不必是矩阵。相反,它也可以构造为一个简单的.csv文件,其中obs
本身是第一列(而不是rowname),而sam
是第一行(少于第一列)的元素。
感谢您的考虑
答案 0 :(得分:1)
data.frame(w=colnames(B),x=B[cbind(n<-max.col(B),1:ncol(B))],y=rownames(B)[n])
w x y
1 sam1 94 obs3
2 sam2 95 obs2
3 sam3 88 obs1
答案 1 :(得分:1)
C <- data.frame(row.names = colnames(B),
MaxVal = apply(B, 2, max),
WhichMax = apply(B, 2, which.max))
C
MaxVal WhichMax
sam1 94 3
sam2 95 2
sam3 88 1
答案 2 :(得分:0)
使用data.table,你可以这样做:
TextHighlighter
B喜欢
library(data.table)
B <- setDT(as.data.frame(B))
B[,name := c("obs1", "obs2", "obs3")]
然后你只需融化并取每个变量组的最大值
sam1 sam2 sam3 name
1: 26 54 88 obs1
2: 64 95 40 obs2
3: 94 49 45 obs3