我有一个包含此内容的文件(标签分隔):
bin_id chr bin EURO.hz
chrF1_17700000 chrF1 17700000 102
chrF1_17800000 chrF1 17800000 199
chrF1_17900000 chrF1 17900000 398
chrF1_18000000 chrF1 18000000 410
chrF1_18100000 chrF1 18100000 342
chrF1_18200000 chrF1 18200000 447
我加载它:
jo <- read.table("tmp.tsv",header=T,row.names=1,sep="\t")
一切都很顺利。
然后,当我这样做时:
jo["chrF1_1800",]
我得到了行名&#34; chrF1_18000000&#34;:
chr bin EURO.hz
chrF1_18000000 chrF1 18000000 410
请注意不同数量的零。重新解决问题:虽然行名称&#34; chrF1_180000&#34;或&#34; chrF1_180&#34;不存在,R返回&#34; chrF1_18000000&#34;。
我在不同的R版本(3.0.1(2013-05-16)和R版本2.15.2(2012-10-26))的两台不同的机器(linux,mac)中试过这个。
这种行为对我来说完全出乎意料(并且我的脚本中有许多错误)。这是一个错误???
谢谢! 费德里科
答案 0 :(得分:1)
按行名称子集data.frame
使用部分匹配,如documentation中所述:
[和[[提取方法部分匹配行名称]。默认情况下 既不是部分匹配列名,也不是[[如果精确= FALSE (如果精确= NA,则发出警告)。如果你想要完全匹配 行名称使用匹配,如示例中所示。
如果您想要完全匹配,可以使用match功能,例如:
# partial matching does not work
jo[match("chrF1_18000",row.names(jo)),]
# chr bin EURO.hz
# NA <NA> NA NA
# exact matching works
jo[match("chrF1_18000000",row.names(jo)),]
# chr bin EURO.hz
# chrF1_18000000 chrF1 18000000 410
答案 1 :(得分:0)
或使用subset
subset(jo, rownames(jo)=="chrF1_1800")
#[1] chr bin EURO.hz
#<0 rows> (or 0-length row.names)
subset(jo, rownames(jo)=="chrF1_18000000")
# chr bin EURO.hz
#chrF1_18000000 chrF1 18000000 410
grep
jo[grep("\\<chrF1_1800\\>",row.names(jo)),]
#[1] chr bin EURO.hz
#<0 rows> (or 0-length row.names)