我的数据框架如下所示
TFexp
ID Entrez_Gene_ID Symbol adj.P.Val P.Value t B logFC GSM507414
ILMN_1765574 7020 TFAP2A 0.03071446 0.001797766 -5.9919321 -1.012015 -1.02847949 9.537218
ILMN_2374115 7020 TFAP2A 0.03914067 0.002813079 -5.4197845 -1.517871 -0.75604907 6.776104
ILMN_1749838 7593 ZNF42 0.12390434 0.021504872 -3.2861751 -3.807814 -0.48844495 8.586840
ILMN_2181540 7528 YY1 0.21007443 0.054908628 2.4869982 -4.834348 0.31190866 10.404929
ILMN_1733135 7020 TFAP2A 0.22665655 0.063170290 -2.3738597 -4.984464 -0.82238355 3.827819
ILMN_1670816 7593 ZNF42 0.44843565 0.220579380 1.3975294 -6.251177 1.60730795 2.963474
ILMN_1770892 7528 YY1 0.47245442 0.243567365 1.3198784 -6.343075 0.16865034 10.903882
ILMN_2275760 7020 TFAP2A 0.72242186 0.532549376 -0.6695509 -6.978362 -0.52387868 3.392317
ILMN_1676010 6667 SP1 0.75701851 0.581434509 0.5886784 -7.034562 0.07281042 7.846117
ILMN_2282477 7020 TFAP2A 0.95496669 0.907458427 -0.1221984 -7.225401 -0.02493289 6.903279
在Symbol
的每个级别中,我想选择min,并从这些最小值构造一个新的数据框。
我试过这个
ddply(TFexp, .(Symbol), function(x)x[x$P.Value==min(x$P.Value)])
但是这返回了以下内容:
ID Entrez_Gene_ID Symbol adj.P.Val P.Value t B logFC GSM507414 GSM507415
1 ILMN_1676010 6667 SP1 0.7570185 0.58143451 0.5886784 -7.034562 0.07281042 7.846117 7.920055
2 ILMN_1765574 <NA> <NA> NA NA -5.9919321 NA NA NA NA
3 ILMN_2374115 <NA> <NA> NA NA -5.4197845 NA NA NA NA
4 ILMN_1733135 <NA> <NA> NA NA -2.3738597 NA NA NA NA
5 ILMN_2275760 <NA> <NA> NA NA -0.6695509 NA NA NA NA
6 ILMN_2282477 <NA> <NA> NA NA -0.1221984 NA NA NA NA
7 ILMN_2181540 <NA> YY1 NA 0.05490863 NA -4.834348 NA 10.404929 NA
8 ILMN_1770892 <NA> YY1 NA 0.24356737 NA -6.343075 NA 10.903882 NA
9 ILMN_1749838 <NA> ZNF42 NA 0.02150487 NA -3.807814 NA 8.586840 NA
10 ILMN_1670816 <NA> ZNF42 NA 0.22057938 NA -6.251177 NA 2.963474 NA
任何想法?
干杯,
戴维。
答案 0 :(得分:3)
(未测试的)
ddply(TFexp, .(Symbol), function(x)x[which.min(x$P.Value),])
这两个变化:
,
以使其实际成为
行选择。答案 1 :(得分:2)
那是因为x[x$P.Value==min(x$P.Value)]
正在选择data.frame的一列,而不是一行。请改用x[x$P.Value==min(x$P.Value),]
。更好的是,使用x[which.min(x$P.Value),]
。