【发布时间】:2014-04-02 14:07:13
【问题描述】:
我的数据:
> dput(head(tbl))
structure(c("a2p1u8", "a2qab2", "a6zl23", "a6zlf3", "a6zq61",
"a6ztx1", "0", "0", "0", "0", "0.9339597", "0", "0", "0", "0",
"0", "14.2445924", "0", "0", "0", "0", "0", " 1.84391660", "0",
"0", "0", "0", "0", "1.00000000", "0", "0", "0", "0", "0", "0.85034470",
"0", "0.06312408", "0", "0", "1.11684073", "1.00000000", "1.29478436",
"0.135377134", "0", "0", "0.941579636", "0.389199799", "0.705215641",
"0.34063483", "0", "0", "1.00000000", "0.46785766", "0", "1.43325438",
"0", "0", "0", "0.15782118", "0", "1.71425096", "0", "0", "0",
"0.38274080", "0", " 0.71553232", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "1.72759758", "0", "0", "0", "0", "0", "1.712898580",
"0", "0", "0", "0", "0", "0.74788829", "1.00000000", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "1.29452015", "0", "0",
"0", "0", "0", "0.85273992", "0", "0", "0"), .Dim = c(6L, 25L
), .Dimnames = list(NULL, c("Gene name", "2_1", "2_2", "2_3",
"2_4", "2_5", "2_6", "2_7", "2_8", "2_9", "2_10", "2_11", "2_12",
"2_13", "2_14", "2_15", "2_16", "2_17", "2_18", "2_19", "2_20",
"2_21", "2_22", "2_23", "2_24")))
作为输出,我想获得一个新的 data.frame/matrix,它具有相同的行数和列数,并且该函数找到峰值的单元格中的数字为 1。
which(diff(sign(diff(Gene name)))==-2)+1
如何在data.frame的每一行中找到一个峰值?
【问题讨论】:
-
“找到一个高峰”是什么意思?您提供的结构对应于一个字符矩阵。您可能希望除第一列之外的所有列都为
numeric,因此一个好的开始是强制转换为数据框并更改数据类型:tbl.df <- as.data.frame(tbl, stringsAsFactors=FALSE); tbl.df[, -1] <- apply(tbl.df[, -1], 2, as.numeric)。 -
这是我要使用的函数(用于“找峰”):
which(diff(sign(diff(Gene name - name of the row)))==-2)+1 -
还是没明白你说的“找峰”是什么意思。试图从您的评论中推断,因为“基因名称”是一个字符串(无法轻易推断出数值),并且“行的名称”没有定义,但默认为整数 1 到 6。也许你可以走我们通过计算,如果不是在 R 代码中,那么在人类可读的数学中?例如,如果您将每一行视为一个单独的序列并且“峰值”与“最大值”相同,那么“a2p1u8”的峰值可能是第 2_15 列(值为 1.727598)。
-
我相信 OP 希望将函数(返回“峰值”的索引)应用于数据的每一行。
-
也许以下其中一项提供了您想要/需要的
apply(tbl.df[,-1], 1, function(rr) max(rr))、apply(tbl.df[,-1], 1, function(rr) which.max(rr))或colnames(tbl.df)[1+apply(tbl.df[,-1], 1, function(rr) which.max(rr))]。
标签: r