在数据框中基于字符选择行

7

我有一个 data.frame,其 row.names 与 test 中相同。

test <-
c("Env_1990:trait_KPS", "Env_1990:trait_SPSM", "Env_1990:trait_TKW",
"Env_1990:trait_Yield", "Env_1991:trait_KPS", "Env_1991:trait_SPSM",
"Env_1991:trait_TKW", "Env_1991:trait_Yield", "Env_1992:trait_KPS",
"Env_1992:trait_SPSM", "Env_1992:trait_TKW", "Env_1992:trait_Yield",
"Env_1993:trait_KPS", "Env_1993:trait_SPSM", "Env_1993:trait_TKW",
"Env_1993:trait_Yield", "Env_1994:trait_KPS", "Env_1994:trait_SPSM",
"Env_1994:trait_TKW", "Env_1994:trait_Yield", "Env_1995:trait_KPS",
"Env_1995:trait_SPSM", "Env_1995:trait_TKW", "Env_1995:trait_Yield",
"Gen_B88:Env_1990:trait_KPS", "Gen_B88:Env_1990:trait_SPSM",
"Gen_B88:Env_1990:trait_TKW", "Gen_B88:Env_1990:trait_Yield",
"Gen_B88:Env_1991:trait_KPS", "Gen_B88:Env_1991:trait_SPSM",
"Gen_B88:Env_1991:trait_TKW", "Gen_B88:Env_1991:trait_Yield",
"Gen_B88:Env_1992:trait_KPS", "Gen_B88:Env_1992:trait_SPSM",
"Gen_B88:Env_1992:trait_TKW", "Gen_B88:Env_1992:trait_Yield",
"Gen_B88:Env_1993:trait_KPS", "Gen_B88:Env_1993:trait_SPSM",
"Gen_B88:Env_1993:trait_TKW", "Gen_B88:Env_1993:trait_Yield")

我想选择那些以Env_开头的行。我在R中尝试了以下代码。

grep(pattern="[Env_]", x=test).

这段代码会返回所有行,因为每一行的名称中都包含 Env_。我想知道如何选择只以 Env_ 开头的行。感谢您的帮助。


[Env_] 是一个字符类。它匹配包含单个字符 E、n、v 或 _ 中任意一个的任何字符串。 - Matthew Lundberg
1个回答

14

您想在行/字符串的开头添加^字符:

> grep("^Env_", test)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
> grep("^Env_", test, value = TRUE)
 [1] "Env_1990:trait_KPS"   "Env_1990:trait_SPSM"  "Env_1990:trait_TKW"  
 [4] "Env_1990:trait_Yield" "Env_1991:trait_KPS"   "Env_1991:trait_SPSM" 
 [7] "Env_1991:trait_TKW"   "Env_1991:trait_Yield" "Env_1992:trait_KPS"  
[10] "Env_1992:trait_SPSM"  "Env_1992:trait_TKW"   "Env_1992:trait_Yield"
[13] "Env_1993:trait_KPS"   "Env_1993:trait_SPSM"  "Env_1993:trait_TKW"  
[16] "Env_1993:trait_Yield" "Env_1994:trait_KPS"   "Env_1994:trait_SPSM" 
[19] "Env_1994:trait_TKW"   "Env_1994:trait_Yield" "Env_1995:trait_KPS"  
[22] "Env_1995:trait_SPSM"  "Env_1995:trait_TKW"   "Env_1995:trait_Yield"

感谢您的友善和有用的回答。如果您能告诉我如何仅选择那些包含“Env_”在中间的行,我将不胜感激。谢谢。 - MYaseen208
很高兴能够帮助。对于那些在中间的 "Env_",它们似乎总是在 ":" 之后出现,因此你的模式可以是 ":Env_"。一个更通用的模式,可以匹配任何字符后面的 "Env_",是 ".+Env_"。 - flodel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接