我正在尝试在我的数据中找到特定基因的名称。这就是我到目前为止所做的:
gnames = unique(data_rd[,1])
gnames= gnames[2:length(gnames)]
gnames包含我必须找到名称的所有基因。
gdata = lapply(list_of_data,function(x) x[3:nrow(x),1,9])
gdata是一组具有名称但在不同文件中的基因,其中一些基因可能会在少量文件中重复出现。
这就是我创建list_of_data的方式:
tbl = list.files(pattern="*.csv")
list_of_data = lapply(tbl, read.csv)
让我们在一个例子中解释一下:
gnames:
Gene1
Gene2
Gene3
Gene4
Gene5
Gene6
Gene7
gdata:
Gene1 NameOfGene1
Gene5 NameOfGene5
Gene7 NameofGene7
Gene2 NameOfGene2
Gene6 NameOfGene6
Gene3 NameOfGene3
Gene4 NameOfGene4
我希望R通过查看此list_of_data从gnames中找到所有基因的名称。
> head(gnames)
[1] "ZZ_FGCZCont0025" "ZZ_FGCZCont0099" "ZZ_FGCZCont0126" "ZZ_FGCZCont0146"
[5] "AT1G19570" "ZZ_FGCZCont0158"
> head(gdata) ## edited, too big.
[[1]]
X
3 ZZ_FGCZCont0025
4 ZZ_FGCZCont0099
5 ZZ_FGCZCont0126
6 ZZ_FGCZCont0146
7 AT1G19570.1
8 ZZ_FGCZCont0158
9 AT5G38480.1
10 ZZ_FGCZCont0050
X.8
3 gi|1346343|sp|P04264| K2C1_HUMAN KERATIN, TYPE II CYTOSKELETAL 1 (CYTO
4 sp|K1C9_HUMAN|
5 gi|71528|pir|| KRHU0 keratin 10, type I, cytoskeletal (clone lambda-KH
6 sp|K22E_HUMAN|
7 | Symbols: DHAR1, ATDHAR1, DHAR5 | dehydroascorbate reductase | chr1:6773462-6774413 REVERSE LENGTH=213
8 gi|88041|pir||A31994 keratin 10, type I, epidermal - human gi|623409 (
9 | Symbols: GRF3, RCI1 | general regulatory factor 3 | chr5:15410277-15411285 FORWARD LENGTH=255
10 gi|71536|pir|| KRHU2 keratin, 67K type II cytoskeletal - human (fragme
答案 0 :(得分:2)
尝试:
lapply(gdata, function(x)x[x[,1] %in% gnames, 2])
我测试了以下数据:
set.seed(123)
gnames <- sample(LETTERS, 10)
num.rows <- sample(10:12)
gdata <- lapply(num.rows, function(i)data.frame(X = sample(LETTERS, i),
Name = sample(LETTERS, i)))
请注意,您的代码可以通过更好的方式存储gdata
而受益匪浅。根据您的示例数据,似乎代码名为X
和X.8
:您应该使用更有意义的名称并在代码中使用它们,而不必假设哪些列索引包含哪些数据(您强制使用)我使用1
代替"Gene"
和2
代替"GeneName"
。)您还可以设想gnames
使用Gene
生成一个data.frame }列,这样您就可以依靠merge
来完成您正在寻找的工作。