在 R 中查找数据 table 中的字符串列表
Find a list of strings across a data table in R
我有一个字符串向量(候选),我想在数据 table (FBgn_Dmels) 中找到每个字符串,如果是 return 第一列条目在一行中找到匹配项(例如 CG2175 应该 return "1-Dec")。
> head(candidates)
[1] "CG2175" "CG31196" "CG3169" "CG15168" "CG2252" "CG2019"
> FBgn_Dmels
V1_01 V1_02 V1_03 V1_04 V1_05 V1_06 V1_07 V1_08 V1_09 V1_10 V1_11 V1_12 V1_13 V1_14
1: 1-Dec FBgn0000427 FBgn0000645 CG2175 NA NA NA NA NA NA NA NA NA NA
2: 1-Sep FBgn0011710 FBgn0005665 FBgn0013404 FBgn0014082 FBgn0024226 CG1403 NA NA NA NA NA NA NA
3: 128up FBgn0010339 FBgn0010196 CG8340 NA NA NA NA NA NA NA NA NA NA
4: 14-3-3epsilon FBgn0020238 FBgn0011329 FBgn0016739 FBgn0016743 FBgn0046456 FBgn0051196 FBgn0064146 FBgn0066007 CG31196 NA NA NA NA
5: 14-3-3zeta FBgn0004907 FBgn0010635 FBgn0019723 FBgn0023038 FBgn0046306 FBgn0064146 CG17870 NA NA NA NA NA NA
---
17743: Zw10 FBgn0004643 FBgn0000016 FBgn0002765 FBgn0029627 CG9900 NA NA NA NA NA NA NA NA
17744: Zwilch FBgn0061476 FBgn0036933 FBgn0042214 CG18729 CG18639 NA NA NA NA NA NA NA NA
17745: zyd FBgn0265767 FBgn0243503 FBgn0025689 FBgn0058147 FBgn0040030 CG2893 CG40147 NA NA NA NA NA NA
17746: zye FBgn0036985 CG5847 NA NA NA NA NA NA NA NA NA NA NA
17747: Zyx FBgn0011642 FBgn0047225 FBgn0052018 CG32018 NA NA NA NA NA NA NA NA NA
我可以在数据帧上使用循环来解决这个问题,但它看起来很慢而且效率很低。我想知道是否有一种直接的方法可以使用数据 tables.
非常感谢您提出如何解决此问题的建议。
-地理位置
有点老套,但似乎可行。我假设您的数据名为 FBgn_Dmels:
candidates <- c("CG2175", "CG31196", "CG3169", "CG15168", "CG2252", "CG2019")
getthem <- function(string){
string <- paste0("^",string,"$")
as.character(FBgn_Dmels[which(apply(FBgn_Dmels, 2, function(x) grepl(string, x, perl=TRUE)), arr.ind = TRUE)[1], "V1_01"][1])
}
申请(候选人,得到他们)
首先我们定义了一个函数(getthem
),它获取第一次出现的一个,然后我们使用sapply
来命中所有候选者。
我有一个字符串向量(候选),我想在数据 table (FBgn_Dmels) 中找到每个字符串,如果是 return 第一列条目在一行中找到匹配项(例如 CG2175 应该 return "1-Dec")。
> head(candidates)
[1] "CG2175" "CG31196" "CG3169" "CG15168" "CG2252" "CG2019"
> FBgn_Dmels
V1_01 V1_02 V1_03 V1_04 V1_05 V1_06 V1_07 V1_08 V1_09 V1_10 V1_11 V1_12 V1_13 V1_14
1: 1-Dec FBgn0000427 FBgn0000645 CG2175 NA NA NA NA NA NA NA NA NA NA
2: 1-Sep FBgn0011710 FBgn0005665 FBgn0013404 FBgn0014082 FBgn0024226 CG1403 NA NA NA NA NA NA NA
3: 128up FBgn0010339 FBgn0010196 CG8340 NA NA NA NA NA NA NA NA NA NA
4: 14-3-3epsilon FBgn0020238 FBgn0011329 FBgn0016739 FBgn0016743 FBgn0046456 FBgn0051196 FBgn0064146 FBgn0066007 CG31196 NA NA NA NA
5: 14-3-3zeta FBgn0004907 FBgn0010635 FBgn0019723 FBgn0023038 FBgn0046306 FBgn0064146 CG17870 NA NA NA NA NA NA
---
17743: Zw10 FBgn0004643 FBgn0000016 FBgn0002765 FBgn0029627 CG9900 NA NA NA NA NA NA NA NA
17744: Zwilch FBgn0061476 FBgn0036933 FBgn0042214 CG18729 CG18639 NA NA NA NA NA NA NA NA
17745: zyd FBgn0265767 FBgn0243503 FBgn0025689 FBgn0058147 FBgn0040030 CG2893 CG40147 NA NA NA NA NA NA
17746: zye FBgn0036985 CG5847 NA NA NA NA NA NA NA NA NA NA NA
17747: Zyx FBgn0011642 FBgn0047225 FBgn0052018 CG32018 NA NA NA NA NA NA NA NA NA
我可以在数据帧上使用循环来解决这个问题,但它看起来很慢而且效率很低。我想知道是否有一种直接的方法可以使用数据 tables.
非常感谢您提出如何解决此问题的建议。
-地理位置
有点老套,但似乎可行。我假设您的数据名为 FBgn_Dmels:
candidates <- c("CG2175", "CG31196", "CG3169", "CG15168", "CG2252", "CG2019")
getthem <- function(string){
string <- paste0("^",string,"$")
as.character(FBgn_Dmels[which(apply(FBgn_Dmels, 2, function(x) grepl(string, x, perl=TRUE)), arr.ind = TRUE)[1], "V1_01"][1])
}
申请(候选人,得到他们)
首先我们定义了一个函数(getthem
),它获取第一次出现的一个,然后我们使用sapply
来命中所有候选者。